Java ItemListener getitem()不';不要只返回名称

Java ItemListener getitem()不';不要只返回名称,java,swing,netbeans,itemlistener,Java,Swing,Netbeans,Itemlistener,我正在为我的单选按钮使用ItemListener。 我看到了很多ItemListener函数,但我的似乎工作方式不同 ... jUserButton2.addItemListener(ffs); } private ItemListener ffs = new ItemListener(){ @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.S

我正在为我的单选按钮使用ItemListener。 我看到了很多ItemListener函数,但我的似乎工作方式不同

...        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[User,445453,49x18,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.synth。SynthBorder@1f2f60d,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=false,paintFocus=true,按Edicon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=User]”


它不应该只返回值吗?(在本例中为“用户”)

JRadioButton
是一个
JToggleButton
。如果查看源代码,您将看到事件是使用受保护的
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()
(或任何您想要检索的信息)来解决此问题,例如:

公共对象getItem()
返回受事件影响的项

受影响的项目是一个
JRadioButton
(这也是控制台打印的内容)。这在逻辑上是正确的,因为受影响的项目就是该按钮。只需将代码更改为:

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

您为什么不使用
ActionListener
?一个更简单的解决方案是使用event
source
actionCommand
属性(当它是
JRadioButton
的一种类型时,如果不隐式设置,它将返回button.ha的
文本
,非常感谢……似乎((JRadioButton)e.getItem())就是我要找的