ItemListener getitem()不返回名称

时间:2015-09-26 12:46:19

标签: java swing netbeans itemlistener

我正在为我的radiobuttons使用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,445,453,49x18,alignmentX = 0.0,alignmentY = 0.5,border = javax.swing.plaf.synth.SynthBorder @ 1f2f60d,flags = 288,maximumSize =, =的minimumSize,首选大小=,=的DefaultIcon,disabledIcon =,disabledSelectedIcon =,余量= javax.swing.plaf.InsetsUIResource [顶= 0,左= 0,底部= 0,右= 0],的paintBorder =假,paintFocus =真, pressedIcon =,rolloverEnabled =真,rolloverIcon =,rolloverSelectedIcon =,selectedIcon =,文本=用户]“

它不应该只返回值吗? (在这种情况下是“用户”)

2 个答案:

答案 0 :(得分: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()(或您要检索的任何信息)来解决此问题

答案 1 :(得分:1)

正如docs所说:

  

public Object getItem()
  返回受事件影响的项目。

受影响的项目是a => 3(这也是控制台打印的内容)。这是合乎逻辑的,因为受影响的项目是该按钮。只需将代码更改为:

JRadioButton