我应该在Actions中创建Swing组件吗?

时间:2013-02-07 20:13:03

标签: java swing user-interface

我正在为我的Swing组件创建Actions,但是,他们经常需要生成一个确认JDialog。我应该在Action本身内创建这个JDialog,我应该将它传递给Action,还是有替代方法?

实施例

public static class Create extends AbstractAction {
    @Override
    public void actionPerformed(ActionEvent event) {
        int selection = JOptionPane.showConfirmDialog(...);
        // ... processing
    }        
}

这个例子很难进行单元测试,因为它涉及自动选择JDialog(感觉就像代码味道)。

解决方案吗

public static class Create extends AbstractAction {

    private JDialog dialog = null;

    public Create(JDialog dialog) {
        this.dialog = dialog;
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        dialog.display();
        // ... processing
    }        
}

2 个答案:

答案 0 :(得分:0)

大致如此的事情:

class Dialogs {
    public static Dialogs INSTANCE = new Dialogs();

    public int confirm(String message) {
        return JOptionPane.showConfirmDialog(null, message);
    }
}

然后在您呼叫Dialogs.INSTANCE.confirm()的任何地方致电JOptionPane.showConfirmDialog()。要进行测试,请将Dialogs.INSTANCE设置为模拟值。

答案 1 :(得分:0)

我会将对话框创建保持在actionPerformed中,并将以下处理逻辑移到单独的方法中,然后单独测试 该方法。对话创建正常,无需对其进行单元测试。