我用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[用户,445,453,49x18,alignmentX=0.0,alignmentY=0.5,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResourcetop=0,left=0,bottom=0,right=0,paintBorder=false,paintFocus=true,right=0,]”
它不应该只返回价值吗?(在本例中为"User")
发布于 2015-09-26 12:54:31
正如文档所说:
公共对象getItem() 返回受事件影响的项。
受影响的项目是一个JRadioButton
(这也是控制台打印的)。这在逻辑上是正确的,因为受影响的项目就是那个按钮。只需将代码更改为:
String user = ((JRadioButton) e.getItem()).getName();
System.out.println(user);
发布于 2015-09-26 12:53:59
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()
(或任何想检索的信息)来修复此问题。
https://stackoverflow.com/questions/32797331
复制相似问题