你好我的Japplet正在使用JComboBox和5个JRadioButtons在applet上绘制和绘画。目前一切正常,除了我的JRadioButtons,当选择一个按钮时,它不会调用itemStateChanged()。所以在小程序上我可以点击一个按钮,但它不会触发。我的组合框也使用了itemlistener接口并且它可以工作,但无论我尝试过什么,我都无法通过按钮发送信息/火。
我注意到需要两次点击才能选择一个按钮,并希望问题出在其中。
这是一个家庭作业的问题,如果我可以使用actionperformed和actionlistener,我会:(。我需要使用itemlistener。下面是我如何调用我的radiobuttons的示例,将它们添加到形状buttongroup,adidng容器的按钮c。
感谢您的帮助!
对于读这篇文章的人不好意思,但因为这是家庭作业,我不能100%确定我能保持代码,如果你需要帮助理解它,请告诉我吧!
答案 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()方法完成的。然后将面板添加到小程序。