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

首先,您需要参考 contentpane,因为您已将 JPanel 添加到 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 回答