Java 如何在GUI类中实现动作侦听器?
这是我的老师教的GUI课程,他希望我添加一个动作监听器 //您应该为Convert按钮添加ActionListener //在这里,您必须实现操作侦听器 这两条线是他的要求 但他已经创建了一个名为converButton的按钮,我在网上找到的所有教程都告诉我创建一个类来实现ActionListenerJava 如何在GUI类中实现动作侦听器?,java,Java,这是我的老师教的GUI课程,他希望我添加一个动作监听器 //您应该为Convert按钮添加ActionListener //在这里,您必须实现操作侦听器 这两条线是他的要求 但他已经创建了一个名为converButton的按钮,我在网上找到的所有教程都告诉我创建一个类来实现ActionListener 但是convertButton在一个方法中,所以我不知道现在要做什么,也不知道在哪里实现ActionListener。您可以在另一个类中创建一个类。这称为内部类 最简单的形式如下所示 public
但是convertButton在一个方法中,所以我不知道现在要做什么,也不知道在哪里实现ActionListener。您可以在另一个类中创建一个类。这称为内部类 最简单的形式如下所示
public class ConverterGUI {
// You should add ActionListener for the Convert button
private String[] units={"Mile","Yard","Foot"};
private JFrame frame;
public ConverterGUI() {
initializeFrame();
}
private void initializeFrame() {
frame = new JFrame("Length Converter");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initUI();
frame.setLayout(null);
frame.setPreferredSize(new Dimension(700, 300));
frame.pack();
frame.setVisible(true);
}
private void initUI() {
JTextField inputField = new JTextField(15);
inputField.setBounds(60, 50, 200, 30);
JLabel kilometer = new JLabel("Kilometer");
kilometer.setFont(new Font(Font.MONOSPACED, Font.BOLD, 20));
kilometer.setBounds (300, 50, 200, 30);
JTextField outputField = new JTextField(15);
outputField.setEditable(false);
outputField.setLocation(10, 200);
outputField.setBounds(60, 100, 200, 30);
JComboBox outputUnit = new JComboBox<String>();
for (String u : units) {
outputUnit.addItem(u);
}
outputUnit.setBounds (300, 100, 60, 30);
JButton convertButton = new JButton("Convert!");
convertButton.setBounds (60, 150, 200, 30);
convertButton.setFont(new Font(Font.MONOSPACED, Font.BOLD, 20));
frame.add(inputField);
frame.add(kilometer);
frame.add(outputField);
frame.add(outputUnit);
frame.add(convertButton);
}
//Here you have to implement the action listener..
}
您必须在主类的开头添加这两个导入
public class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Your action listener code goes here
}
}
要调用MyActionListener类的实例,您需要在initUI方法中编写以下代码行
内部类与任何其他Java类一样。如果需要,可以将参数传递给构造函数。通常不必将参数传递给内部类构造函数,因为内部类可以访问主类中的任何类变量或方法
public class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Your action listener code goes here
}
}
对于更简单的操作侦听器,您可以创建一个内联匿名类
convertButton.addActionListener(new MyActionListener());
这些应该只用于真正简单的动作侦听器
通常,最好在单独的文件和包中有单独的操作侦听器类。但有时,有一个内联动作侦听器类是有意义的。通常当有太多的参数无法通过构造函数时
我希望这有帮助。阅读匿名类和内部类。添加操作侦听器:button.addActionListenerlistener;;实现:类MyListener实现ActionListener{@Override public void actionPerformedActionEvent ev{…}是的,它帮助很大!非常感谢。另一个问题是,我是否还需要为JComboxOutputUnit添加一个侦听器?有3个选项供用户选择。我想知道用户选择了哪个选项。@commanderspring:否。操作是“转换”按钮。在convert按钮操作侦听器代码中执行实际转换之前,您可以获得JComboBox选择。但是我想在操作侦听器中使用ComboBox的结果。比如,如果用户选择码,我会在action ListenerationPerformed中将Km转换为码。你会怎么做?我无法连接action listener和ComboBox,它们就像两个不同的东西。
convertButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
});