2011-02-23 120 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