SelectionMonitor.java Source code

Java tutorial

Introduction

Here is the source code for SelectionMonitor.java

Source

/*
Java Swing, 2nd Edition
By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole
ISBN: 0-596-00408-7
Publisher: O'Reilly 
*/
// SelectionMonitor.java
//A graphical list selection monitor.
//

import java.awt.BorderLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class SelectionMonitor extends JPanel {

    String label[] = { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
            "Eleven", "Twelve" };

    JCheckBox checks[] = new JCheckBox[label.length];

    JList list;

    public SelectionMonitor() {
        setLayout(new BorderLayout());

        list = new JList(label);
        JScrollPane pane = new JScrollPane(list);

        //  Format the list and the buttons in a vertical box
        Box rightBox = new Box(BoxLayout.Y_AXIS);
        Box leftBox = new Box(BoxLayout.Y_AXIS);

        //  Monitor all list selections
        list.addListSelectionListener(new RadioUpdater());

        for (int i = 0; i < label.length; i++) {
            checks[i] = new JCheckBox("Selection " + i);
            checks[i].setEnabled(false);
            rightBox.add(checks[i]);
        }
        leftBox.add(pane);
        add(rightBox, BorderLayout.EAST);
        add(leftBox, BorderLayout.WEST);
    }

    public static void main(String s[]) {
        JFrame frame = new JFrame("Selection Monitor");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(new SelectionMonitor());
        frame.pack();
        frame.setVisible(true);
    }

    // Inner class that responds to selection events to update the buttons
    class RadioUpdater implements ListSelectionListener {
        public void valueChanged(ListSelectionEvent e) {
            //  If either of these are true, the event can be ignored.
            if ((!e.getValueIsAdjusting()) || (e.getFirstIndex() == -1))
                return;

            //  Change the radio button to match the current selection state
            //  for each list item that reported a change.
            for (int i = e.getFirstIndex(); i <= e.getLastIndex(); i++) {
                checks[i].setSelected(((JList) e.getSource()).isSelectedIndex(i));
            }
        }
    }
}