2015-09-26 1 views
0

Я использую ItemListener для своих излучателей. Я видел много функций ItemListener, но мой, похоже, работает по-другому.ItemListener getitem() не возвращает только имя

...  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, граница = javax.swing.plaf.synth.SynthBorder @ 1f2f60d, флаги = 288 , MaximumSize =, = MinimumSize, PreferredSize =, = DefaultIcon, disabledIcon =, = disabledSelectedIcon, рентабельность = javax.swing.plaf.InsetsUIResource [вершина = 0, слева = 0, нижняя = 0, вправо = 0], paintBorder = ложь, paintFocus = true, pressIcon =, rolloverEnabled = true, rolloverIcon =, rolloverSelectedIcon =, selectedIcon =, text = User] "

Не должно ли оно вернуть только значение? (в данном случае это «Пользователь»)

+0

Есть ли причина, по которой вы не используете 'ActionListener'? Более простым решением было бы использовать свойство 'actionCommand' события' source' (когда это тип 'JRadioButton', который, если не установить неявно, вернет« текст »кнопки. – MadProgrammer

ответ

1

В качестве docs говорят:

общественный объект GetItem()
Возвращает элемент, на который воздействует событие.

Этот предмет является JRadioButton (что также является то, что печатает консоль). Это логично правильно, так как затронутый элемент - это кнопка. Просто измените код на это:

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

ha, спасибо большое ... Кажется ((JRadioButton) e.getItem()) - это то, что я искал – user5372775

1

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, вы получите JRadioButtonthis в приведенном выше коде (третий аргумент конструктора)) ,

Вызов toString на переключателе дает вам именно то, что вы видите.

Вы можете исправить это путем литья e.getItem() к JRadioButton и вызвать getText() (или что-то информацию Вы хотите получить) на нем