2015-05-03 85 views
0

我扩展JButton类并使用ImageIcon作为我的按钮背景。我还添加了一个mouseListener,当鼠标悬停在按钮上或按下按钮时,我可以更改该按钮的图像。这一切都正常工作,但问题是,单击按钮时显示一个JOptionPane询问用户“你确定”,而选项窗格显示时,按钮MouseClicked,mouseExited或mouseReleased方法不会执行,因此它看起来像按钮是一直按住直到使用处理选项对话框。删除对话框不是一个选项。有没有办法在对话框显示之前或期间执行鼠标事件?Java按钮鼠标点击joptionpane

+0

当对话框出现时,'actionPerformed'方法将不会“退出”,这将允许按钮返回到正常状态。你可以把调用包装到'SwingUtilities.invokeLater'中的'JOptionPane'中,但是,这意味着你需要在不同的上下文中响应选项对话框,而不是你现在使用的那个。此外,你应该监视按钮模型的状态,而不是改变你的图标的状态... – MadProgrammer

回答

2

我还添加了一个mouseListener,因此当鼠标悬停在按钮上或按下按钮时,我可以更改该按钮的图像。

阅读AbstractButton API。有些方法可以让你为这些情况指定图标。例如setPressedIcon()

它看起来像按钮卡住,直到使用处理选项对话框。

不确定在选项窗格显示前是否更改了ButtonModel状态。无论如何,您可以尝试使用:

button.paintImmediately(...); 

在显示选项窗格之前。如果ButtonModel状态已更新,则该按钮应在正常状态下重新绘制。请注意,此方法应该很少使用,因为它可能会影响绘画性能。

+0

paintImmediately必须被调出美国东部时间,[看起来像similair问题](http://stackoverflow.com/问题/ 8282488 /为什么 - 不 - 的setSelected-ON-JCheckBox的全输,效果) – mKorbel