反正有没有从JFrame返回特定元素?

时间:2013-04-08 11:44:02

标签: java arrays swing jtextfield

让我们假设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”)?

3 个答案:

答案 0 :(得分: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 
   }
}

希望它有所帮助。

答案 1 :(得分: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());
}

答案 2 :(得分:1)

如果组件都在一个面板上,您可以使用已建议的面板的getComponents()方法。

如果在多个面板上有组件,则需要使用递归来获取所有组件。在这种情况下,你可能会发现达里尔的Swing Utils课程很方便。