我正在处理我的个人Java聊天客户端,其中一个功能是设置用户的状态(可用,不可见,忙)。为了方便用户使用,我将这些状态放入JMenu
JRadioButtonMenuItem
。
问题是我希望每个状态RadioButton
都有自己的无线电点颜色(或点图标)。例如:
我考虑过使用三种不同的自定义JRadioButtonMenuItem
扩展RadioButtonMenuItem
,但无法理解JRadioButtonMenuItem
是如何绘制的。
有人可以帮我解决这个问题吗?
编辑1
感谢您提出的使用Icon
以及setIcon()
和setSelectedIcon()
方法的建议
但是,由于我的问题是关于改变无线电点,你还可以帮我隐藏RadioButton
的无线电点吗?
编辑2
这是我的应用程序的当前屏幕截图
正如你可以看到之前的点RadioButtonMenuItem
在某种程度上是荒谬的废话。这就是为什么我要摆脱点,或将其更改为我的自定义图标:)
答案 0 :(得分:5)
单选按钮的点由每个Look&的UI代表呈现。感觉。您可以提供自己的BasicRadioButtonUI
,但努力并非无足轻重。作为替代方案,实施Icon
界面,如ColorIcon
中显示的here。
答案 1 :(得分:3)
我建议你使用Swing Components的Icon属性。以下是为JRadioButtonMenuItem设置图标的示例。每当状态发生变化时,使用seticon方法更改图标。而不是颜色使用图标
这是一个示例http://www.java2s.com/Code/Java/Swing-JFC/Anexampleofradiobuttonmenuitemsinaction.htm
答案 2 :(得分:1)
我的想法是,JRadioButtonMenuItem的行为很好,只是它的绘画有点傻。但我不想延长它或覆盖油漆或任何这些恶作剧。所以我得出结论,只是偷走了它的行为并将它留下了。
你会注意到ButtonGroup
接受AbstractButton
,所以我喜欢地牢猎人的解决方案:使用常规JMenuItem
。我追加到那个,偷了JToggleButton
的{{1}}并发送了ButtonModel
来进行图片交换(如Ramesh John建议的那样)。
ItemListener
这适用于任何旧图标,而不仅仅是更改按钮的颜色。
答案 3 :(得分:0)
通过扩展RadioButtonMenuItem
添加新课程来自定义JRadioButtonMenuItem
。
通过实现Icon inteface添加内部类以更新状态图标。覆盖所有方法会使用当前状态图标更新paintIcon()
方法。
通过传递状态图标来调用超类。
super(theMenuText, new StatusIcon(theStudyIcon, getUserStatus(UserId)));
添加列表器以获取最新事件,以使用setIcon()
方法更新图标。