JRadioButton itemlistener没有开火

时间:2011-02-23 04:28:55

标签: java swing jcombobox jradiobutton

你好我的Japplet正在使用JComboBox和5个JRadioButtons在applet上绘制和绘画。目前一切正常,除了我的JRadioButtons,当选择一个按钮时,它不会调用itemStateChanged()。所以在小程序上我可以点击一个按钮,但它不会触发。我的组合框也使用了itemlistener接口并且它可以工作,但无论我尝试过什么,我都无法通过按钮发送信息/火。

我注意到需要两次点击才能选择一个按钮,并希望问题出在其中。

这是一个家庭作业的问题,如果我可以使用actionperformed和actionlistener,我会:(。我需要使用itemlistener。下面是我如何调用我的radiobuttons的示例,将它们添加到形状buttongroup,adidng容器的按钮c。

感谢您的帮助!

对于读这篇文章的人不好意思,但因为这是家庭作业,我不能100%确定我能保持代码,如果你需要帮助理解它,请告诉我吧!

2 个答案:

答案 0 :(得分:1)

一般来说,将这个Applet类用于这么多的监听器是个坏主意。它只是增加了混乱,你现在有一个处理太多事件的God对象。有关详细信息,请参阅此讨论:

Advantages to Nested Classes For Listeners in GUIs

第二个问题是你正在大量混合java.awt和javax.swing对象,这些对象在放入同一个容器时会引起问题。你一定要尝试将你的Applet分成2个JPanels,一个用于awt东西(油漆,形状等),另一个用于摇摆东西(按钮,盒子等)。

您似乎正在使用ItemListener类,但当我看到需要两次单击才能选择按钮时,这是awt / swing混音/绘画问题的明显迹象。

答案 1 :(得分:1)

您发布的代码不是SSCCE!

您的问题是关于ItemListener,那么为什么要发布与MouseListener和MouseMotionListener相关的代码?自定义绘画代码与您的问题有什么关系?

你怎么知道没有调用ItemListener代码?您是否向侦听器代码添加了System.out.println(...)语句?首先使用“appletviewer”测试您的代码。它比使用浏览器更容易。从命令行中,您只需:

appletviewer P6.html

或者我发现在不创建HTML文件的情况下测试applet更加容易。您可以将以下代码行添加到源文件的顶部:

// <applet code="P6.class" width="800" height="600"></applet>

现在,您可以通过以下命令测试applet:

appletviewer P6.java

您的代码问题是您的单选按钮被定义为类和局部变量。 ItemListener生成NullPointerException,因为类变量为null。

JRadioButton jrbOval = new JRadioButton("Oval");    

应该是:

jrbOval = new JRadioButton("Oval");    

此外,您不应该重写JApplet的paint()方法。自定义绘制是通过覆盖JPanel的paintComponent()方法完成的。然后将面板添加到小程序。