ItemListener getitem() 不只返回名称



我正在为我的单选按钮使用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=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=false,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=User]"

它不应该只返回值吗?(本例中为"User")

正如文档所说:

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

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

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

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()(或您想要检索的任何信息)来修复此问题

相关内容

  • 没有找到相关文章

最新更新