首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ItemListener getitem()不返回名称

ItemListener getitem()不返回名称
EN

Stack Overflow用户
提问于 2015-09-26 12:46:19
回答 2查看 905关注 0票数 1

我用ItemListener做我的无线电按钮。我看到了许多ItemListener函数,但我的函数的工作方式似乎不同。

代码语言:javascript
代码运行次数:0
运行
复制
...        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")

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-26 12:54:31

正如文档所说:

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

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

代码语言:javascript
代码运行次数:0
运行
复制
String user = ((JRadioButton) e.getItem()).getName();
System.out.println(user);
票数 1
EN

Stack Overflow用户

发布于 2015-09-26 12:53:59

JRadioButtonJToggleButton。如果您查看源代码,您将看到事件是使用受保护的fireItemStateChange方法触发的。例如,在javax.swing.JToggleButton.ToggleButtonModel#setSelected方法中可以找到以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
// 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32797331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档