JDialog中JButton无响应问题求助:按钮点击无功能排查
问题原因及解决方案
哦,这问题太典型了!一眼就看到症结所在啦~
你代码里的核心问题是调用setVisible(true)的时机不对。对于模态JDialog来说,setVisible(true)会直接阻塞当前线程的执行——也就是说,当对话框弹出来之后,后面的代码(包括给cancel按钮绑定ActionListener的部分)根本没机会运行!这就导致按钮虽然显示在界面上,但完全没有绑定点击事件,自然点了没反应。
修正后的代码
把setVisible(true)移到构造方法的最后,确保所有组件的事件监听都绑定完成后,再显示对话框:
JButton cancel; public CodeExample() { setLayout(new FlowLayout(FlowLayout.RIGHT)); add(cancel = new JButton ("Cancel")); setAlwaysOnTop(true); setModal(true); // 先绑定事件监听 cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { System.out.println("test"); } }); // 最后再显示对话框 setVisible(true); }
额外小建议
如果你的项目使用Java 8及以上版本,还可以用Lambda表达式简化ActionListener的写法,代码会更清爽:
cancel.addActionListener(e -> System.out.println("test"));
内容的提问来源于stack exchange,提问作者kaiya
相关产品推荐
相关产品推荐

