2015-09-26 86 views
0

我爲我的單選按鈕使用ItemListener。 我看到了很多ItemListener函數,但是我的工作似乎有所不同。ItemListener getitem()不返回唯一名稱

...  jUserButton2.addItemListener(ffs); 
} 

private ItemListener ffs = new ItemListener(){ 
@Override 
public void itemStateChanged(ItemEvent e) { 
    if (e.getStateChange() == ItemEvent.SELECTED) { 
     String user = e.getItem().toString(); 
     System.out.println(user); 
    } 
} 
}; 

它返回值是「javax.swing.JRadioButton [用戶,445,453,49x18,alignmentX = 0.0,alignmentY = 0.5,邊界= javax.swing.plaf.synth.SynthBorder @ 1f2f60d,旗幟= 288 ,MAXIMUMSIZE =,=的minimumSize,首選大小=,=的DefaultIcon,disabledIcon =,disabledSelectedIcon =,餘量= javax.swing.plaf.InsetsUIResource [頂= 0,左= 0,底部= 0,右= 0],的paintBorder =假, paintFocus = true,pressedIcon =,rolloverEnabled = true,rolloverIcon =,rolloverSelectedIcon =,selectedIcon =,text = User]「

不應該只返回值嗎? (在這種情況下是「用戶」)

+0

是否有任何理由不使用ActionListener?一個簡單的解決方案是使用事件'source'的'actionCommand'屬性(當它是一種'JRadioButton'時,如果沒有隱式設置,將會返回按鈕的文本' – MadProgrammer

回答

1

由於docs說:

公共對象的getItem()
返回受該事件影響的項目。

受影響的項目是JRadioButton(這也是控制檯打印的內容)。這是合理的,因爲受影響的項目是該按鈕。只需將代碼更改爲:

String user = ((JRadioButton) e.getItem()).getName(); 
System.out.println(user); 
+0

ha,非常感謝...似乎((JRadioButton)e.getItem())是我正在尋找 – user5372775

1

JRadioButtonJToggleButton。如果您查看源代碼,您將看到事件使用受保護的fireItemStateChange方法觸發。例如,在javax.swing.JToggleButton.ToggleButtonModel#setSelected方法你會發現下面的代碼:

// Send ItemEvent 
fireItemStateChanged(
    new ItemEvent(this, 
    ItemEvent.ITEM_STATE_CHANGED, 
    this, 
    this.isSelected() ? ItemEvent.SELECTED : ItemEvent.DESELECTED)); 

這意味着,當您收到ItemEvent並調用getItem,您將收到JRadioButton(在上面的代碼this(第三個構造函數參數)) 。

通過單選按鈕調用toString可以準確地看到您所看到的內容。

您可以通過鑄造e.getItem()JRadioButton解決這個問題,並調用(要檢索或任何信息)getText()