2011-02-23 101 views
1

你好,我的Japplet使用JComboBox和5个JRadioButtons来绘制和绘制小程序。目前一切工作,除了我的JRadioButtons,当选择一个按钮时不会调用itemStateChanged()。所以在小程序上,我可以点击一个按钮,但它不会触发。我的组合框也使用itemlistener接口,它的工作原理,但无论我已经尝试过,我不能得到按钮发送信息/火灾。JRadioButton itemlistener没有射击

我注意到它需要两次点击来选择一个按钮,并希望在这个问题之内。

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

感谢您的帮助!

对不起任何人阅读这一点,但因为这是家庭作业我不是100%肯定,我可以保持代码了,下午我如果您需要帮助理解它!

+0

您发布的代码不能帮助我们。我建议你阅读JRadioButton API,并按照链接找到“如何使用单选按钮”的Swing教程,您将在其中找到一个工作示例。如果您仍然需要帮助,请发布证明问题的SSCCE(http://sscce.org)。 – camickr

+0

几乎每个在线指南都表示使用我不被允许使用的actionlistener。我的问题是不知道如何做到这一点,不理解为什么我的itemlistner按钮不选择时触发itemstatechanged。此外,我有一个调试计数器事件火灾,即使我点击100次按钮,也会读取0。 我还在原帖中添加了代码 –

回答

1

您发布的代码不是SSCCE!

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

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

的appletviewer P6.html

或者我觉得easer测试小程序,甚至没有创建一个HTML文件。从命令只是通过使用

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

现在,您可以测试小程序:您可以将下面的代码行添加到您的源文件的顶部

的appletviewer P6.java

的你的代码问题是你的单选按钮被定义为类和本地变量。 ItemListener组成产生一个NullPointerException,因为类变量是空的。

JRadioButton jrbOval = new JRadioButton("Oval");  

应该是:

jrbOval = new JRadioButton("Oval");  

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

+0

对不起,我认为其中一项SSCCE要求是能够立即复制并粘贴并使用它。但无论如何,你的答案是正确的,这是问题所在。谢谢您的帮助! –

+0

@霍华德,是的,这是一个要求,但只有代码明确表明问题。 MouseListener是否导致问题?不,所以不应该包括在内。调试20行代码比调试100行代码更容易。简化代码是你的工作。 – camickr

1

一般来说,将Applet类用于许多监听器是个不错的主意,它只是增加到了困惑中,你现在有一个处理太多事件的上帝对象。看到这个讨论更多的信息:

Advantages to Nested Classes For Listeners in GUIs

的第二个问题是,你是大量混合java.awt中和javax.swing中的对象,这是众所周知的时候都放在同一个容器中产生问题。你应该尝试将你的Applet分成2个JPanel,一个用于awt东西(油漆,形状等),另一个用于摆动东西(按钮,盒子等)。

你似乎被正确使用的ItemListener类,但是当我看到,它需要两次点击选择一个按钮,这是的AWT/Swing的混合/画问题的明显标志。

+0

感谢这正是我一直在寻找的东西。我没有时间去实施这些改变,但是如果它能够工作,我会在明天之前通知你。这个“混乱”也会导致JRadioButtons不激活itemStateChanged? –

+0

提醒自己:达到每日投票限额。在允许再次投票时进行投票回复。 –

+0

@混淆本身不是错误 - 大量易混淆的代码仍然可以工作。但现在它无法正常工作,而且代码的可读性差使得我们难以找到出错的部分。我保证这一点 - 如果你改写和组织你的班级,但仍然无法工作,我们至少能够在第二时间查明问题。 – donnyton