2010-07-23 70 views
1

我创建了一个子类的一个JRadioButton我在其中覆盖paintComponent方法,像这样:如何自定义JRadioButton的渲染?

@Override 
protected void paintComponent(Graphics g) { 
    g.drawImage(
     isSelected() ? 
      getCheckedImg() : 
      getBasicImg() 
    , 0, 0, this); 
} 

但似乎一旦按钮被绘制,这是它永远使用图像。 isSelected测试似乎没有任何效果。图形缓存或Java的东西?我如何为我的自定义JRadioButton提供选定和未选择的图像?我必须编写自定义用户界面吗?

+0

如果每次选择切换时添加一个侦听器并在按钮上调用repaint()会怎么样? – I82Much 2010-07-24 02:11:14

回答

4

阅读API。有如下方法:

setIcon() 
setSelectedIcon() 

其中,您可以使用,而不是自定义绘画。

+0

这保留了模型的功能,而且更简单! – trashgod 2010-07-24 03:51:19

+0

我想我不明白你的要求。这两种方法的要点是用你想要的任何东西替换“单选按钮图标”。张贴您的SSCCE(http://sscce.org )显示问题。 – camickr 2010-07-25 00:41:48

+0

这是我的错,这被拒绝了。我在事故中点击了错误的按钮!此解决方案完全可行。这是非常容易实现的,我不必与UI搞砸。谢谢! – 2010-07-25 02:53:19

-3

即使在Java swing中,为了自定义外观,我通常会覆盖paint而不是paintComponent。我相信默认paint将拨打paintComponent,但只有组件必须被重新粉刷。

+0

-1,自定义绘画应该在paintComponent()而不是paint()中完成。阅读自定义绘画中的Swing教程部分:http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/TOC.html – camickr 2010-07-24 03:15:27

+0

谢谢,我已阅读过,并曾多次阅读。然而,'paint'的基本版本调用'paintComponent'以及其他动作;当我不需要这些操作时(这很常见),我没有重写'paint'的问题。你只是把“RTFM”放在漂亮的裙子里。我有RTFM,然后是RTFSourceCode,然后我为自己的项目做出了自己的逻辑决策。 – 2010-07-24 06:22:30

+0

这对你来说可能很好,但是这个建议与Swing设计使用的方式背道而驰,因此你需要解释使用这种方法的后果/好处。 – camickr 2010-07-24 15:56:25