Jos*_*zel 3 java user-interface listeners
我正在设置一个 GUI,我需要在其中获取从表单元素输入的信息并处理信息。这需要我使用一些元素来访问其他元素。
例如,我有一个输入框 ( JTextField) 和JButton旁边的按钮 ( )。当按钮被按下时,我需要能够操作输入框中输入的文本。到目前为止,我为完成这项工作所做的一切都失败了。
这就是我的代码现在的样子(我在评论中嵌入了我的问题):
public class MyClass
{
public static void main(String args[])
{
// Form elements are in here
JTextField myTextField = new JTextField(10);
JButton myTextFieldSubmit = new JButton("Submit");
myTextFieldSubmit.addActionListener(new ListenerClass());
}
}
class ListenerClass implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
// This is what happens when these elements are used
// I need to be able to access the form elements from MyClass in here, but this doesn't seem possible with my current setup
// For example, when the Submit button is pressed, I need to be able to myTextField.getText() and edit MyClass members
// How should my setup be changed to accommodate these needs?
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
这在很大程度上是一个可变范围的问题。
目前,文本字段和按钮在main方法的范围内,因此为 设置单独的类ActionListener将意味着它无法访问这些变量。
有几种方法可以实现这一点:
(1)制作的内部类ListenerClass中MyClass,并打开myTextField和myTextFieldSubmit进入的实例字段MyClass。
public class MyClass
{
final static JTextField myTextField = new JTextField(10);
final static JButton myTextFieldSubmit = new JButton("Submit");
public static void main(String args[])
{
myTextFieldSubmit.addActionListener(new ListenerClass());
}
static class ListenerClass implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
myTextField.setText("");
}
}
}
Run Code Online (Sandbox Code Playgroud)
(2) 在main方法中创建一个匿名内部类,这将允许myTextField和myTextFieldSubmit保持在同一位置,只要它们被声明final。
public class MyClass
{
public static void main(String args[])
{
final JTextField myTextField = new JTextField(10);
final JButton myTextFieldSubmit = new JButton("Submit");
myTextFieldSubmit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
myTextField.setText("");
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
(3) 制作一个局部于main方法的局部类。同样,这将需要声明文本字段和按钮final以允许从内部类访问。
public class MyClass
{
public static void main(String args[])
{
final JTextField myTextField = new JTextField(10);
final JButton myTextFieldSubmit = new JButton("Submit");
class ListenerClass implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
myTextField.setText("");
}
}
myTextFieldSubmit.addActionListener(new ListenerClass());
}
}
Run Code Online (Sandbox Code Playgroud)
(4) 处理对 的引用ListenerClass,例如在构造函数中,以及制作myTextField和myTextFieldSubmit实例变量。
public class MyClass
{
JTextField myTextField = new JTextField(10);
JButton myTextFieldSubmit = new JButton("Submit");
public MyClass()
{
myTextFieldSubmit.addActionListener(new ListenerClass(this));
}
public static void main(String args[])
{
new MyClass();
}
}
class ListenerClass implements ActionListener
{
MyClass myClass;
public ListenerClass(MyClass myClass)
{
this.myClass = myClass;
}
public void actionPerformed(ActionEvent e)
{
myClass.myTextField.setText("");
}
}
Run Code Online (Sandbox Code Playgroud)
(5) 制作myTextField和myTextFieldSubmit进入static字段,并允许从ListerClass.
public class MyClass
{
static JTextField myTextField = new JTextField(10);
static JButton myTextFieldSubmit = new JButton("Submit");
public static void main(String args[])
{
myTextFieldSubmit.addActionListener(new ListenerClass());
}
}
class ListenerClass implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
MyClass.myTextField.setText("");
}
}
Run Code Online (Sandbox Code Playgroud)
可能还有更多方法可以实现这一点,并且可能有更好的方法来实现这一点。选择哪种方法实际上取决于所需的应用程序设计。
| 归档时间: |
|
| 查看次数: |
2532 次 |
| 最近记录: |