Java 是否仍然可以从JFrame返回特定元素?

Java 是否仍然可以从JFrame返回特定元素?,java,arrays,swing,jtextfield,Java,Arrays,Swing,Jtextfield,假设JFrame包含9个JTextFields,如下所示: 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

假设JFrame包含9个JTextFields,如下所示:

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;
}
是否仍然可以从“游戏框架”对象中提取所有文本字段?类似于DOM中docyment.getElementByTagName(“元素”)的等价物?

请尝试以下内容

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 
   }
}
Component[]components=gameFrame.getComponents();
对于(int i=0;i
希望有帮助。

尝试以下内容

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 
   }
}
Component[]components=gameFrame.getComponents();
对于(int i=0;i

希望有帮助。

首先,您需要引用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());
}

首先,您需要引用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());
}

如果组件都在一个面板上,那么可以使用该面板的getComponents()方法,如前所述


如果在多个面板上有组件,则需要使用递归来获取所有组件。在这种情况下,您可能会发现Darryl的类很方便。

如果组件都在一个面板上,您可以使用面板的getComponents()方法,正如前面所建议的那样


如果在多个面板上有组件,则需要使用递归来获取所有组件。在这种情况下,您可能会发现Darryl的类很方便。

没有实现这个抽象,请看没有实现这个抽象,请看好的,我知道这是如何工作的。但我会等着看是否有类似DOM的解决方案,如果没有,我就接受你的解决方案。无论如何,你会得到一张赞成票:)请添加
if(components[i]instanceof JTextField)
以获得更好的答案添加了你的建议@mKorbel。我认为这个解决方案不适用于这种特殊情况。好的,我知道这是怎么回事。但我会等着看是否有类似DOM的解决方案,如果没有,我就接受你的解决方案。无论如何,你会得到一张赞成票:)请添加
if(components[i]instanceof JTextField)
以获得更好的答案添加了你的建议@mKorbel。我不认为这个解决方案适用于这种特殊情况。只对ContentPane使用+1,在这种情况下可能不重要,但只对ContentPane使用good catch+1,在这种情况下可能不重要,但这是个好机会