0

JFrame に次のような 9 つの JTextField が含まれているとします。

public static JFrame generateFrame(){
    JFrame frame = new JFrame();
    Container c = frame.getContentPane();
    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(3,3));
    JTextField[]textFields = new JTextField[9];
    for(int i=0; i<9;i++){
        textFields[i]= new JTextField(1);
        textFields[i].setFont(new Font("Sans-serif", Font.BOLD, 30));
        panel.add(textFields[i]);
    }

    c.add(panel);
    frame.setVisible(true);
    frame.setSize(300,300);

    return frame;
}

したがって、返された JFrame を main メソッドの変数に次のように割り当てます。

    public static void main(String []args){
    JFrame gameFrame = generateFrame(); 
}

「gameFrame」オブジェクトからすべてのテキストフィールドを抽出する方法はありますか? DOM で相当する docyment.getElementByTagName("element") のようなものはありますか?

4

3 に答える 3

3

フォローしてみてください。

Component[] components = gameFrame.getComponents();
 for (int i = 0; i < components.length; i++) {
  if (components[i] instanceof JTextField) {
     //DO what you want with the text field here 
   }
}

それが役に立てば幸い。

于 2013-04-08T11:52:23.093 に答える
2

JPanel を contentpane に追加したので、最初に contentpane の参照を取得する必要があります。その後、JPanel からフィールドを取得できます。

JFrame gameFrame = generateFrame();
JPanel panel = (JPanel) gameFrame.getContentPane().getComponent(0);

Component[] comp = panel.getComponents();

for (Component c : comp) {
    JTextField field = (JTextField) c;
    System.out.println("value   :   " + field.getText());
}
于 2013-04-08T12:14:27.220 に答える
1

コンポーネントがすべて単一のパネルにある場合は、すでに提案されているように、パネルの getComponents() メソッドを使用できます。

複数のパネルにコンポーネントがある場合は、再帰を使用してすべてのコンポーネントを取得する必要があります。この場合、Darryl のSwing Utilsクラスが便利です。

于 2013-04-08T15:30:15.570 に答える