4

我(非常神奇地)在写这个问题时回答了我自己的问题,但这是我想与大家分享的一个发现。我知道这些应该是真正的“问题”,但这对我来说是一个巨大的发现。但是,下面有一个“问题”可以回答。

我创建了一个扩展 JToggleButton 的自定义类。在这个类中,我删除了所有默认的 MouseListeners,因此它只在我认为对象准备好时才接受鼠标操作。我遇到的问题是操作 JToggleButtons ImageIcon(使用 setIcon() 设置)。如果当我告诉要选择按钮时该按钮未显示在屏幕上(由于 JScrollPane 而不可见),则 ImageIcon 将消失。同样,如果我在选择按钮时修改了 ImageIcon,ImageIcon 也会消失。

事实证明,在我的自定义 MouseListener 中,我使用的是 getModel.setSelected(true) 而不是 getModel.setPressed(true)。显然我对选择和按下之间的区别没有清楚的理解,但足以说这解决了我的问题。因此,我的“问题”将是对这两个术语的澄清。

总而言之,当您打算使用 setPressed() 时,不要在按钮上使用 setSelected()。追踪这个是多么痛苦啊!我真诚地希望这对其他人有所帮助。电子邮件是有效的,但垃圾邮件捕获器。

4

1 回答 1

2

好的,我又找到了自己的答案,所以我想我会分享并关闭这个问题。当按钮具有复选框/单选图标时,它被“选中”。当按钮被按下时,按钮被“按下”。JToggleButtons 似乎结合使用这两个属性来正确“单击并按下”按钮。

ImageIcon 消失的原因是我无意中混合了 setPressedIcon()/setPressed() 和 setSelectedIcon()/setSelected()。因为我混淆了术语并且没有认识到差异,所以我的用法不一致。

于 2011-01-01T20:15:13.203 回答