jbutton doClick()方法不起作用

我单元测试的时候用JDialog中的button点击,发现不起作用

public class Message extends JDialog implements ActionListener {
    protected JFrame messageFrame;
    protected JLabel messsageLabel;
    protected JButton closeButton;

    public Message(JFrame jFrame) {
        //调用父类构造函数
        super(jFrame, "提示", true);

        //初始化私有变量
        messsageLabel = new JLabel("", JLabel.CENTER);      //文字居中对齐
        closeButton   = new JButton();

        //对话框初始化
        messageFrame = jFrame;
        this.setSize(300, 200);
        this.setLayout(new GridBagLayout());
        this.setDefaultCloseOperation(HIDE_ON_CLOSE);

        //关闭按钮样式设置
        closeButton.setText("确定");
        closeButton.setSize(50,50);

        //添加组件
        this.getContentPane().add(messsageLabel);
        this.getContentPane().add(closeButton);

        //为组件注册监听事件
        closeButton.addActionListener(this);
    }

    public void showErrorMessage(String message) {

        messsageLabel.setText(message);         //label组件添加文字
        this.setLocation(messageFrame.getX()+ messageFrame.getWidth(), messageFrame.getY());     //相对定位
        this.setVisible(true);                  //显示对话框
    }

    public void actionPerformed(ActionEvent e) {
        dispose();      //关闭JDialog
    }
}

测试代码

public class ApplicationTest {
    @Test
    public void main() throws Exception {
        //新建一个注册界面
        Register register = new Register();
        assertTrue(register.isShowing());       //断言界面正在处于点击状态

        //准备相关数据
        User user = new User("liming@qq.com", "liming");
        register.username.setText(user.getUsername());
        register.password.setText(user.getPassword());
        register.repassword.setText(user.getPassword());

        register.register.doClick();                    //手动触发点击按钮事件

        System.out.println(register.alertMessage.messsageLabel.getText());
        assertEquals("注册成功!", register.alertMessage.messsageLabel.getText());
        register.alertMessage.closeButton.doClick();    //点击确定按钮
//
//        assertFalse(register.alertMessage.isShowing()); //断言窗口消失
    }

}

然后发现doClick方法不会起作用,也就是确定按钮不会自定被点击

阅读 3.4k
1 个回答

我不是代码的作者,我只是代码的搬运工

ActionEvent event;
long when;

when  = System.currentTimeMillis();
event = new ActionEvent(button, ActionEvent.ACTION_PERFORMED, "Anything", when, 0);

for (ActionListener listener : button.getActionListeners()) {
    listener.actionPerformed(event);
}

原文出处:
https://stackoverflow.com/que...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题