I'm adding an ItemListener to JButton but method doesn't run. I read in java API that a JButton can add an object that implements ItemEventListenr interface by addItemListener method.But when pressing on the JButton only actionPerform method runs.I also tried to call
JButton.setSelected(true)
but it didn't make a change.
JFrame frame = new JFrame();
plainJButton = new JButton( "Plain Button" );
plainJButton.setSelected(true);
ButtonHandler handler = new ButtonHandler();
ButtonItemHandler itemHandler = new ButtonItemHandler();
plainJButton.addActionListener(handler );
plainJButton.addItemListener( itemHandler );
frame.add( plainJButton ); // add plainJButton to JFrame
// inner class for button event handling
private class ButtonHandler implements ActionListener
{
// handle button event
public void actionPerformed( ActionEvent event )
{
JOptionPane.showMessageDialog( ButtonFrame.this, String.format(
"You pressed: %s", event.getActionCommand() ) );
} // end method actionPerformed
} // end private inner class ButtonHandler
// inner class for button event handling
private class ButtonItemHandler implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
System.out.println(e.getStateChange()+"\n");
System.out.println(plainJButton.isSelected() +"\n");
}
}
} // end class ButtonFrame
I expect itemStateChange method will be run but only actionPerformed method runs.
ItemListenerwill not be fired when aJButtonis pressed. (Without being completely sure)ItemListenerwill never be fired for aJButton, unless you fire it manually. The reason aJButtonprovides anaddItemListenermethod is because it inherits it from its parent classAbstractButton implements ItemSelectable.AbstractButtonneeds to provide this method since there are a lot of component classes thatextendit and they need to beItemSelectables. For example, take a look atJRadioButton extends AbstractButton. When you select/deselect aJRadioButtonitsItemListenerwill fire normally.You can always test it yourself and see that every time you click the radio button the listener will be fired.