让我们假设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”)?
答案 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课程很方便。