一个内部类来处理所有JButton actionEvents?

时间:2016-04-21 14:37:36

标签: java swing actionevent

我只有一个JFrame然后按层次结构我创建了一些JPanel来最终使我的按钮和文本字段以及其他组件转到我想要的位置。我只有一个类MainWindow,其中包含一组面板和按钮以及绑定到它们的文本字段。此外,所有组件都是MainWindow类的字段。

现在我只创建了一个实现ButtonHandler的内部类ActionListener,我只是检查e.getSource() == <name of the button>

然后我调用适当的方法来处理它。这里有几个代码

private class ButtonHandler implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == submit) {
            AppHelper helper = new AppHelper();
            if (helper.addRecord(personName.getText(),
                    itemName.getText(),
                    itemCost.getText(),
                    consoleArea)) {
                consoleArea.append("Record added to database...\n");
                itemName.requestFocusInWindow();
            }
        }
        if(e.getSource() == clear) {
            itemName.setText("");
            itemCost.setText("");
            personName.setText("");
            consoleArea.append("All items cleared...\n");
        }
        if(e.getSource() == exit) {
            frame.dispose();
            System.exit(0);
        }
        if(e.getSource() == search) {
            AppHelper helper = new AppHelper();
            helper.search(months.getSelectedItem().toString(), 
                    year.getText(), consoleArea);
        }
        if(e.getSource() == calculate) {
            AppHelper helper = new AppHelper();
            helper.calculate(months.getSelectedItem().toString(), 
                    year.getText(), consoleArea);
        }
        if(e.getSource() == deleteFile) {
            AppHelper helper = new AppHelper();
            helper.deleteFile(months.getSelectedItem().toString(), 
                    year.getText(), consoleArea);
        }
    }

}

我有一个registerListerner()方法注册(名字暗示)。

private void registerListeners() {
    itemName.addFocusListener(new SelectAllHandler());
    itemCost.addFocusListener(new SelectAllHandler());
    personName.addFocusListener(new SelectAllHandler());
    year.addFocusListener(new SelectAllHandler());
    submit.addActionListener(new ButtonHandler());
    clear.addActionListener(new ButtonHandler());
    exit.addActionListener(new ButtonHandler());
    search.addActionListener(new ButtonHandler());
    calculate.addActionListener(new ButtonHandler());
    deleteFile.addActionListener(new ButtonHandler());
}

那么,这是个好主意吗?我是Swing的新手,基本上是GUI。所以任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

为不同的操作设置单独的处理程序是不是更好:

class SearchHandler implement ActionListener {
    public SearchHandler(AppHelper helper) {
        this.helper = helper;
    }
    public void actionPerformed(ActionEvent e) {
        helper.search(months.getSelectedItem().toString(), year.getText(), consoleArea);
    }
}

与其他操作相同,然后创建一个独特的帮助程序来构建处理程序:

AppHelp helper = new AppHelper();
submit.addActionListener(new SubmitHandler(helper));
clear.addActionListener(new ClearHandler(helper));
exit.addActionListener(new ExitHandler(helper));
search.addActionListener(new SearchHandler(helper));

更好的选择是使用Action,从而使用处理程序的代码为您的按钮提供必要的图标,快捷方式等。阅读Java教程。