更改JRadioButtonMenuItem的选定点颜色

时间:2012-08-19 07:04:23

标签: java swing radio-button menuitem

我正在处理我的个人Java聊天客户端,其中一个功能是设置用户的状态(可用,不可见,忙)。为了方便用户使用,我将这些状态放入JMenu JRadioButtonMenuItem

问题是我希望每个状态RadioButton都有自己的无线电点颜色(或点图标)。例如:

  • [绿点]可用
  • [Red-Dot]忙碌
  • [灰点]隐形。

我考虑过使用三种不同的自定义JRadioButtonMenuItem扩展RadioButtonMenuItem,但无法理解JRadioButtonMenuItem是如何绘制的。

有人可以帮我解决这个问题吗?

编辑1
感谢您提出的使用Icon以及setIcon()setSelectedIcon()方法的建议 但是,由于我的问题是关于改变无线电点,你还可以帮我隐藏RadioButton的无线电点吗?

编辑2
这是我的应用程序的当前屏幕截图 MyIM menubar screenshot
正如你可以看到之前的点RadioButtonMenuItem在某种程度上是荒谬的废话。这就是为什么我要摆脱点,或将其更改为我的自定义图标:)

4 个答案:

答案 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()方法更新图标。