2015-09-26 89 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()