1

こんにちは:)私はJava Swingの初心者で、問題の解決策をグーグルで見つけることができません。JPanel があり、JButton を押した後に JTextField を動的に追加したいと考えています。そして、後でそれらから getText() を取得するにはどうすればよいですか? 私のコード、コメント部分が正しく機能していません。

変数「カウンター」は、パネルにあるフィールドの数をカウントします。

public class AppPanel extends JPanel {

    private JTextField tfData[];
    private JButton btAdd;
    private int counter = 1;

    public AppPanel() {
            setLayout(null);

            //tfData[counter] = new JTextField();
            //tfData[counter-1].setBounds(20, 20, 250, 20);
            //add(tfData[counter-1]);

            btAdd = new JButton("Add field");
            btAdd.setBounds(280, 20, 120, 20);
            btAdd.addActionListener(new alAdd());
            add(btAdd); 
    }

    class alAdd implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                    //tfData[counter] = new JTextField();
                    //tfData[counter].setBounds(20, 20+20*counter, 250, 20);
                    //add(tfData[counter]);
                    ++counter;
            }
    }
}
4

1 に答える 1

1

既にテキスト フィールドへの参照を保存しているので、この配列を使用してテキスト フィールドのテキストをクエリします。

tfData[counter-1].getText();

最後に追加されたテキスト フィールドのテキストが表示されます。

ただし、前に配列を初期化する必要があります。そうしないと、配列に項目を追加できなくなります。追加コードをコメントアウトしたときの主な問題だったと思います。

// think about how many text fields you will need (here: 16)
private JTextField tfData[] = new tfData[16];

配列を使用している場合は、その境界を超えないように注意してください。ただし、リストは動的に大きくなり、配列の境界を処理する必要がなく、カウントをスキップすることもできるため、前のコメントで提案されているようにリストを使用することをお勧めします (リストもそれを行います)。

于 2012-06-16T08:20:57.697 に答える