Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在GUI类中实现动作侦听器?_Java - Fatal编程技术网

Java 如何在GUI类中实现动作侦听器?

Java 如何在GUI类中实现动作侦听器?,java,Java,这是我的老师教的GUI课程,他希望我添加一个动作监听器 //您应该为Convert按钮添加ActionListener //在这里,您必须实现操作侦听器 这两条线是他的要求 但他已经创建了一个名为converButton的按钮,我在网上找到的所有教程都告诉我创建一个类来实现ActionListener 但是convertButton在一个方法中,所以我不知道现在要做什么,也不知道在哪里实现ActionListener。您可以在另一个类中创建一个类。这称为内部类 最简单的形式如下所示 public

这是我的老师教的GUI课程,他希望我添加一个动作监听器

//您应该为Convert按钮添加ActionListener

//在这里,您必须实现操作侦听器

这两条线是他的要求

但他已经创建了一个名为converButton的按钮,我在网上找到的所有教程都告诉我创建一个类来实现ActionListener


但是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

        }
    });