Java GUI-actionListener和actionPerformed

Java GUI-actionListener和actionPerformed,java,user-interface,actionlistener,Java,User Interface,Actionlistener,我的问题与Java编程、GUI概念有关。我想知道我是否在actionListener中注册了多个组件,如JButtons、JRadioButtons、JComboBox和JCheckBox,这意味着我希望这些组件执行一个操作 现在,在actionPerformed方法中,如何链接所有这些组件以执行操作。 例如,如果我检查一个JRadioButton、一个JCheckBox和一个JButton,我想在aJLabel中显示一些东西,比如总数 如何在actionPeformed方法中实现所有这些组件

我的问题与Java编程、GUI概念有关。我想知道我是否在actionListener中注册了多个组件,如JButtons、JRadioButtons、JComboBox和JCheckBox,这意味着我希望这些组件执行一个操作

现在,在actionPerformed方法中,如何链接所有这些组件以执行操作。 例如,如果我检查一个JRadioButton、一个JCheckBox和一个JButton,我想在aJLabel中显示一些东西,比如总数

如何在actionPeformed方法中实现所有这些组件

谢谢你。。
关于,

首选方法是为每个组件创建一个
Action
ActionListener
,它将执行该组件所需的作业

这提供了责任的隔离和分离,如果您做得正确,就有可能重复使用(一个
操作可以应用于
JMenuItem
JToolbar上的
JButton
,并带有一个键绑定)

它还使替换功能更容易(替换单个
操作
操作侦听器
,就像重新编写“mega”
操作侦听器

如何在actionPeformed方法中实现所有这些组件

要引用组件,请创建实例变量

要实现
actionPerformed
方法,请创建一个实现
ActionListener
的类;这可以是匿名类或命名类

在本例中,我们创建两个ActionListener作为匿名内部类

Scratch.java

import javax.swing.*;

public class Scratch extends JFrame {
    JButton button1 = new JButton("Click Me");
    JCheckBox check1 = new JCheckBox("Check Me");
    JRadioButton radio1 = new JRadioButton("Select Me");
    JComboBox<String> combo1 = new JComboBox<String>(new String[] {"Choose Me", "No me!"});

    public Scratch() {
        setPreferredSize(new java.awt.Dimension(50, 170));
        setLayout(new java.awt.FlowLayout());
        add(radio1);
        add(check1);
        add(combo1);
        add(button1);
        radio1.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent event) {
                check1.setSelected(!radio1.isSelected());
            }
        });
        button1.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                combo1.setSelectedIndex(combo1.getSelectedIndex() == 0 ? 1 : 0);
            }
        });
        pack();
    }

    public static void main(String[] args) {
        new Scratch().setVisible(true);
    }
}

如最后一个示例所示,我们可以使用该方法来发现触发事件的组件。

e.getSource()的目的是什么?
getSource
的目的只是,它是事件的源。例如,如果要定义一个
操作
,该操作能够从
JTable
(通过键绑定)中删除行,则可能不希望直接引用表,但可以使用
getSource
获取对生成事件的表的引用。回到内部类和匿名类之前的好日子,通常的做法是将不相关的操作处理捆绑到尽可能少的
ActionListener
s中(考虑到您必须直接通过父类实现
ActionListener
,或者创建一个子类)。这是一个混乱的局面,很难维护、管理和调试。现在,更好的做法是为每个组件提供一个
ActionListener
(如果这样做有意义的话),您的意思是像下面的示例一样?radio1.addActionListener(本);radio2.addActionListener(本);复选框1.addActionListener(此);按钮1.addActionListener(此按钮);现在,我如何在actionPerformed方法中符合上述要求?是的,从我这里可以看出,这种方法是一种完全痛苦的方法。它还公开了您的
actionPerformed
方法,这在大多数情况下是不可取的,如果我有一个按钮单击事件、一个单选按钮和一个复选框事件呢?所有这些都能适用于actionPerformed方法吗?是的,如果这对您想要完成的工作更有效的话。通常,我会为每个组件使用不同的事件处理程序方法。如果您选择仅使用一个事件处理程序,则可以通过调用
ActionEvent
来发现触发事件的组件。请参阅我迄今为止所做的工作:不幸的是,如果(park.isSelected())sum=600,则它不能正常工作
;如果(pool.isSelected())总和=750,则为else;如果(lake.isSelected())sum=825;如果(mean.isSelected())总和+=200;总计.setText(“$”+总和)我们不能在if(pool.isSelected()&&dine.isSelected())这样的条件下使用&&&警告阅读此问题的任何人:不要费心回答,这家伙不会高估好答案,但会就他基本的数学代码如何不起作用进行没完没了的评论讨论。不幸的是,我无法高估你的答案!Lool man,你在这里是寻求选票还是帮助他人?我相信帮助别人比乞求选票更重要!无论如何,谢谢你的帮助!上帝保佑你!这叫交换。人们帮助你,你也会给予一些回报。但是你希望人们帮助你,而你什么也不给。
public class Scratch extends JFrame
    implements java.awt.event.ActionListener // <- implements ActionListener
{
    JButton button1 = new JButton("Click Me");

    public Scratch() {
        // layout, etc.
        add(button1);
        button1.addActionListener(this); // <- tell button1 to call my actionPerformed()
    }

    @Override
    public void actionPerformed(java.awt.event.ActionEvent event) {
        Object component = event.getSource(); // which control was clicked?
        if (component == button1) {
            // do something in response to button1 click event
        }
    }
}