【问题标题】:JRadioButton itemlistener not firingJRadioButton itemlistener 未触发
【发布时间】:2011-02-23 04:28:54
【问题描述】:

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

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

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

感谢您的帮助!

很抱歉任何阅读本文的人,但因为这是家庭作业,我不能 100% 确定我可以保持代码正常运行,如果您需要帮助理解它,请 PM 我!

【问题讨论】:

  • 您发布的代码对我们没有帮助。我建议您阅读 JRadioButton API 并点击关于“如何使用单选按钮”的 Swing 教程的链接,您将在其中找到一个工作示例。如果您仍然需要帮助,请发布您的 SSCCE (sscce.org) 来证明问题。
  • 几乎每个在线指南都说要使用我不允许使用的 actionlistener。我的问题不是不知道怎么做,而是不明白为什么我的 itemlistner 按钮在选择时没有触发 itemstatechanged。此外,即使我单击按钮 100 次,我也有一个调试计数器 eventfire,它的读数为 0。我还在原始帖子中添加了代码

标签: java swing jcombobox jradiobutton


【解决方案1】:

您发布的代码不是 SSCCE!

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

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

appletviewer P6.html

或者我发现甚至无需创建 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() 方法来完成的。然后将面板添加到小程序中。

【讨论】:

  • 对不起,我认为 SSCCE 的要求之一是能够复制和粘贴并立即使用它。但无论如何,你的答案是正确的,这就是问题所在。感谢您的帮助!
  • @Howard Ho,是的,这是一个要求,但仅限于具体说明问题的代码。 MouseListener 是否引起了问题?不,所以不应该包括在内。调试 20 行代码比调试 100 行代码更容易。简化代码是你的工作。
【解决方案2】:

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

Advantages to Nested Classes For Listeners in GUIs

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

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

【讨论】:

  • 谢谢,这正是我一直在寻找的东西。我没有时间实施这些更改,但我会在明天之前通知您是否有效。这种“混乱”是否也会导致 JRadioButtons 不激活 itemStateChanged?
  • 提醒自己:已达到每日投票上限。允许再次投票时回复投票。
  • @Howard 混乱本身并不是错误——大量令人困惑的代码仍然可以工作。但是现在它不起作用,并且代码的低可读性使我们很难真正找到错误的部分。我保证这一点——如果你重写和组织你的课程并且它仍然不起作用,我们至少能够在一秒钟内查明问题。
猜你喜欢
  • 2015-01-22
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多