1

一定のサイズの jtext フィールドを作成したいのですが、入力が大きくなるとスクロール ペインのように拡張したいと考えています。これが私がこれまでに持っているものです:

JButton b,b1;

JLabel j1,j2,j3;


JTextField t1,t2;
public Window(){

    super("frame");
    //new Thread(this).start();
    b=new JButton("Click");
    j1=new JLabel("VALUE1");
    t1=new JTextField(30);
    j2=new JLabel("VALUE2");j3=new JLabel(" ");
    t2=new JTextField(30);
    j1.setBounds(100, 50, 150, 50);
    t1.setBounds(150, 50, 200, 50);
    j2.setBounds(200, 150, 250, 150);
    t2.setBounds(250, 150, 200, 50);j3.setBounds(300, 150, 250, 150);
    b.setBorder(new LineBorder(Color.black));
    b.setBackground(Color.black);
    b.setForeground(Color.white);
    b1=new JButton("Exit");
    super.setSize(300,300);
    super.setLocation(250,150);
    super.setLayout(new FlowLayout());
    super.setVisible(true);
    add(j1);add(t1);add(j2);add(t2); add(j3);
    add(b);add(b1);
    b.addActionListener(this);
    b1.addActionListener(this);
4

3 に答える 3

1

JScrollPaneを使用したくない場合、これはあなたが探しているものです-

JTextFieldのサイズを自動サイズ変更するサンプルプログラムを作成しました。つまり、テキストを追加するとサイズが大きくなり、テキストを削除するとサイズが小さくなります。

KeyListenerの--keyTypedイベントを使用して、テキストフィールドサイズを検出および更新しました。ドキュメントリスナーを追加して、同じことを行うこともできます。

これが私のサンプルコードです-

import java.awt.Dimension; 
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame; 
import javax.swing.JTextField; 
public class AutoResizeTest 
{      
    public AutoResizeTest(){
        JFrame frame = new JFrame("Auto-Resizable TextField");         
        frame.setLayout(null);

        MyCustomTextField expandableText = new MyCustomTextField(20);
        expandableText.setBounds(10, 10, 200, 30);
        expandableText.setPreferredSize(new Dimension(200,30));
        expandableText.setMaximumSize(new Dimension(600,30));

        frame.add(expandableText);
        frame.setBounds(100,100,700,100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
        frame.setVisible(true);
    }

    public static void main(String[] args) 
    {         
        AutoResizeTest test = new AutoResizeTest();
    }      

    class MyCustomTextField extends javax.swing.JTextField{

        private int originallimit;
        int previousLength;
        int length;

        public MyCustomTextField(int limit){

            previousLength=0;
            originallimit = limit;

            this.addKeyListener(new KeyAdapter() {
                public void keyTyped(KeyEvent e) { 

                    JTextField textField = (JTextField) e.getSource();                 
                    length = textField.getText().length();

                    if(length >= originallimit){

                        if(length > previousLength){
                            textField.setSize(new Dimension(textField.getWidth()+10, textField.getHeight()));
                        }
                        else{
                            if(length < previousLength)
                            textField.setSize(new Dimension(textField.getWidth()-10, textField.getHeight()));
                        }
                        previousLength = length;

                    }else{
                        textField.setSize(textField.getPreferredSize());
                    }
                }
            });
        }

    }
}

このコードでは、サイズを10だけ縮小/縮小しました。希望の値を入力できます。

それがあなたを助けることを願っています。

于 2012-11-02T18:54:09.780 に答える
0

TextAreaBorderLayoutを使用して別のJPanelに配置し、中央に配置すると、コンテンツが増えるとパネルが自動的に拡張されます。

textArea = new JTextArea(2, WIDTH);
textArea.setLineWrap(true);
textArea.getDocument().putProperty("filterNewlines", Boolean.TRUE);
于 2012-11-04T15:35:19.667 に答える
0

JTextFieldのデフォルト サイズが設定され、必要に応じてフィールドを拡張するScrollPaneを JTextField に提供します。

Try the following

JTextField jtext = new JTextField(pane);
JScrollPane scroll = new JScrollPane(jtext);
于 2012-11-02T11:46:13.250 に答える