我正在使用Eclipse的Window Builder插件来构建Java Swing Desktop应用程序Front End。 问题是,当我想获取组件的值时,在Action Listener上,我逐个索引获取组件。 请参阅代码段
public class SomeListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
//button from which action is triggered
JButton startTestButton = (JButton) event.getSource();
//components
Component[] components = startTestButton.getParent().getComponents();
//Get individual components
JCheckBox endUserLabel = (JCheckBox) components[0];
}
}
问题是,当新元素添加到容器时,假设一个JTextBox,所有元素的索引都会被更改。有没有更好的方法来实现这个目标?
答案 0 :(得分:0)
是的,不要依赖getComponents()
中的索引。而是使用所需的正确引用设置ActionListener
,或者对可以在GUI中进行所需更改的控制器对象的引用进行设置。在调用actionPerformed()
方法之前执行此操作。
作为旁注,如果您要继续处理此项目,请手动删除GUI构建器和代码。它将为您节省长期的工作量,并将帮助您更快地学习Swing。
答案 1 :(得分:0)
如果要访问侦听器中的特定小部件,则需要跟踪它们或提供解决方法。
跟踪解决方案:
解决方案:
更好的解决方案:
跟踪示例:
final JTextField textField = new JTextField();
textField.setName("userinput");
JButton ok = new JButton("OK");
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed (ActionEvent e) {
System.out.println("Text: " + textField.getText());
}
});