1

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

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

This is for a homework problem and if I could use an actionperformed and actionlistener I would :(. I need to use itemlistener. Below are examples of how I'm calling my radiobuttons, adding them to the shapes buttongroup, and adidng the buttons to the container c.

Thanks for any help!

Sorry to anyone reading this but because it was homework I'm not 100% sure I can keep the code up, PM me if you need help understanding it!

4

2 回答 2

1

您发布的代码不是 SSCCE!

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

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

小程序查看器 P6.html

或者我发现甚至无需创建 HTML 文件就可以更轻松地测试小程序。您可以将以下代码行添加到源文件的顶部:

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

现在,您可以从命令中测试小程序,只需使用:

小程序查看器 P6.java

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

JRadioButton jrbOval = new JRadioButton("Oval");    

应该:

jrbOval = new JRadioButton("Oval");    

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

于 2011-02-23T06:23:45.803 回答
1

一般来说,对这么多听众使用 Applet 类是个坏主意。它只会增加混乱,您现在拥有一个处理太多事件的上帝对象。有关更多信息,请参阅此讨论:

GUI 中侦听器嵌套类的优势

第二个问题是您大量混合了 java.awt 和 javax.swing 对象,众所周知,将它们放在同一个容器中会导致问题。您绝对应该尝试将您的 Applet 分成 2 个 JPanel,一个用于 awt 的东西(油漆、形状等),一个用于摆动的东西(按钮、框等)。

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

于 2011-02-23T06:01:52.030 回答