JPanel 动作监听器

Ron*_*nin 5 java swing actionlistener jtextfield jcheckbox

我有一个带有一堆不同复选框和文本字段的 JPanel,我有一个被禁用的按钮,需要在设置特定配置时启用。我需要的是在整个 JPanel 上寻找事件的侦听器,无论何时发生任何变化。我相信我需要一个动作监听器,但我找不到任何东西来将动作监听器与 JPanel 连接起来

JPanel Window = new JPanel();
Window.addActionListener(new ActionListener(){
//Check if configurations is good
}
Run Code Online (Sandbox Code Playgroud)

我想我可以将我的代码多次复制并粘贴到面板中的每个侦听器中,但这对我来说似乎是一种糟糕的编码习惯。

dic*_*c19 4

首先,@Sage 在他的评论中提到,JPanel更像是一个容器,而不是一个执行操作的组件。所以你不能将ActionListener附加到JPanel.

我想我可以将我的代码多次复制并粘贴到面板中的每个侦听器中,但这对我来说似乎是糟糕的编码实践。

你是完全正确的,这根本不是一个好的做法(参见DRY 原则)。相反,您可以只定义一个ActionListener并将其附加到您的JCheckBoxes 中,如下所示:

final JCheckBox check1 = new JCheckBox("Check1");
final JCheckBox check2 = new JCheckBox("Check2");
final JCheckBox check3 = new JCheckBox("Check3");

final JButton buttonToBeEnabled = new JButton("Submit");
buttonToBeEnabled.setEnabled(false);

ActionListener actionListener = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        boolean enable = check1.isSelected() && check3.isSelected();
        buttonToBeEnabled.setEnabled(enable);
    }
};

check1.addActionListener(actionListener);
check2.addActionListener(actionListener);
check3.addActionListener(actionListener);
Run Code Online (Sandbox Code Playgroud)

这意味着:如果check1和 都check3被选中,则必须启用该按钮,否则必须禁用该按钮。当然,只有您知道应选择哪种复选框组合才能启用该按钮。

查看如何使用按钮、复选框和单选按钮教程。