Java Tutorial/Swing Event/ItemListener
Содержание
ComboBox with ItemListener
<source lang="java">
import java.awt.BorderLayout; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; public class ComboBoxWithItemChangedListener extends JFrame {
public static void main(String[] args) { ComboBoxWithItemChangedListener that = new ComboBoxWithItemChangedListener(); that.setVisible(true); } public ComboBoxWithItemChangedListener() { setSize(450, 350); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(new ComboPanel(), BorderLayout.SOUTH); }
} class ComboPanel extends JPanel {
final static String[] treasure = { "Gold", "Silver", "Diamonds", "Rubies", "Emeralds", "Sapphires", "Chocolate" }; public ComboPanel() { final JComboBox combo = new JComboBox(treasure); combo.setMaximumRowCount(5); combo.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { System.out.println("Combo: " + combo.getSelectedItem()); } }); combo.setSelectedIndex(4); add(combo); }
}</source>
Firing Item Events
<source lang="java">
import java.awt.ItemSelectable; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.event.EventListenerList; public class Main {
public static void main(String[] argv) throws Exception { MyComponent component = new MyComponent(); JFrame f = new JFrame(); f.add(component); f.setSize(300, 300); f.setVisible(true); }
} class MyComponent extends JTextField implements ItemSelectable {
protected EventListenerList listenerList = new EventListenerList(); public Object[] getSelectedObjects() { return new String[] { "a", "b", "c" }; } public void addItemListener(ItemListener l) { listenerList.add(ItemListener.class, l); } public void removeItemListener(ItemListener l) { listenerList.remove(ItemListener.class, l); } void fireItemEvent(Object item, boolean sel) { ItemEvent evt = new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED, item, sel ? ItemEvent.SELECTED : ItemEvent.DESELECTED); Object[] listeners = listenerList.getListenerList(); for (int i = 0; i < listeners.length - 2; i += 2) { if (listeners[i] == ItemListener.class) { ((ItemListener) listeners[i + 1]).itemStateChanged(evt); } } }
}</source>
How to Write an Item Listener
<source lang="java">
import java.awt.Color; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.AbstractButton; import javax.swing.JCheckBox; import javax.swing.JFrame; public class JCheckBoxItemListener {
public static void main(String args[]) { JFrame frame = new JFrame("Iconizing CheckBox"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JCheckBox aCheckBox4 = new JCheckBox("Stuffed Crust"); ItemListener itemListener = new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { AbstractButton abstractButton = (AbstractButton)itemEvent.getSource(); Color foreground = abstractButton.getForeground(); Color background = abstractButton.getBackground(); int state = itemEvent.getStateChange(); if (state == ItemEvent.SELECTED) { abstractButton.setForeground(background); abstractButton.setBackground(foreground); } } }; aCheckBox4.addItemListener(itemListener); frame.add(aCheckBox4); frame.setSize(300, 200); frame.setVisible(true); }
}</source>
ItemListener for JRadioButton
<source lang="java">
import java.awt.BorderLayout; import java.awt.ruponent; import java.awt.Container; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.WindowConstants; public class Main extends JFrame {
private JRadioButton small, medium, large; private JButton button; public Main(String title) { super(title); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); Container contentPane = this.getContentPane(); ButtonGroup group = new ButtonGroup(); small = new JRadioButton("small"); medium = new JRadioButton("medium"); large = new JRadioButton("large"); group.add(small); group.add(medium); group.add(large); button = new JButton("Click here."); button.setBounds(100, 50, 100, 50); JPanel center = new JPanel(); center.setLayout(null); center.add(button); contentPane.add(center, BorderLayout.CENTER); JPanel north = new JPanel(); north.add(small); north.add(medium); north.add(large); contentPane.add(north, BorderLayout.NORTH); ChangeSize listener = new ChangeSize(button); small.addItemListener(listener); medium.addItemListener(listener); large.addItemListener(listener); } public static void main(String[] args) { JFrame f = new Main("JRadioButtonDemo"); f.setSize(300, 200); f.setVisible(true); }
} class ChangeSize implements ItemListener {
private Component component; public ChangeSize(Component c) { component = c; } public void itemStateChanged(ItemEvent e) { String size = (String) e.getItem(); if (size.equals("small")) { component.setSize(75, 20); } else if (size.equals("medium")) { component.setSize(100, 50); } else if (size.equals("large")) { component.setSize(150, 75); } }
}</source>
Toggle button with ItemListener
<source lang="java">
import java.awt.BorderLayout; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.AbstractButton; import javax.swing.ButtonGroup; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JToggleButton; public class ToggleButtonCheckBoxRadioButton extends JFrame {
public static void main(String[] args) { ToggleButtonCheckBoxRadioButton that = new ToggleButtonCheckBoxRadioButton(); that.setVisible(true); } public ToggleButtonCheckBoxRadioButton() { setSize(450, 350); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(new TogglePanel(), BorderLayout.SOUTH); }
} class TogglePanel extends JPanel {
public TogglePanel() { JToggleButton tog = new JToggleButton("Toggle"); ItemListener listener = new ItemListener() { public void itemStateChanged(ItemEvent e) { AbstractButton src = (AbstractButton) (e.getSource()); System.out.println("Toggle: " + src.getText()); } }; tog.addItemListener(listener); add(tog); JCheckBox cbox = new JCheckBox("Checkbox"); cbox.addItemListener(listener); add(cbox); ButtonGroup btngroup = new ButtonGroup(); for (int i = 1; i <= 3; i++) { JRadioButton radio = new JRadioButton("Radio " + i); btngroup.add(radio); radio.addItemListener(listener); add(radio); } }
}</source>