ItemListener getitem() 不 return 只有名字
ItemListener getitem() doesn't return only name
我正在为我的单选按钮使用 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);
}
}
};
它 returns 的值是 "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]"
不应该 return 只是值吗? (在本例中是"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()
(或您想要检索的任何信息)来解决此问题
正如 docs 所说:
public Object getItem()
Returns the item affected by the event.
受影响的项目是 JRadioButton
(这也是控制台打印的内容)。这在逻辑上是正确的,因为受影响的项目是那个按钮。只需将代码更改为:
String user = ((JRadioButton) e.getItem()).getName();
System.out.println(user);
我正在为我的单选按钮使用 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);
}
}
};
它 returns 的值是 "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]"
不应该 return 只是值吗? (在本例中是"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()
(或您想要检索的任何信息)来解决此问题
正如 docs 所说:
public Object getItem()
Returns the item affected by the event.
受影响的项目是 JRadioButton
(这也是控制台打印的内容)。这在逻辑上是正确的,因为受影响的项目是那个按钮。只需将代码更改为:
String user = ((JRadioButton) e.getItem()).getName();
System.out.println(user);