MainClass.java Source code

Java tutorial

Introduction

Here is the source code for MainClass.java

Source

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class MainClass extends JFrame {

    public MainClass() {
        super("Selection Model Test");
        setSize(450, 350);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        TableModel tm = new AbstractTableModel() {
            public int getRowCount() {
                return 10;
            }

            public int getColumnCount() {
                return 10;
            }

            public Object getValueAt(int r, int c) {
                return "0";
            }
        };

        final JTable jt = new JTable(tm);

        JScrollPane jsp = new JScrollPane(jt);
        getContentPane().add(jsp, BorderLayout.CENTER);

        JPanel controlPanel, buttonPanel, columnPanel, rowPanel;

        buttonPanel = new JPanel();
        final JCheckBox cellBox, columnBox, rowBox;
        cellBox = new JCheckBox("Cells", jt.getCellSelectionEnabled());
        columnBox = new JCheckBox("Columns", jt.getColumnSelectionAllowed());
        rowBox = new JCheckBox("Rows", jt.getRowSelectionAllowed());

        cellBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                jt.setCellSelectionEnabled(cellBox.isSelected());
                columnBox.setSelected(jt.getColumnSelectionAllowed());
                rowBox.setSelected(jt.getRowSelectionAllowed());
            }
        });

        columnBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                jt.setColumnSelectionAllowed(columnBox.isSelected());
                cellBox.setSelected(jt.getCellSelectionEnabled());
            }
        });

        rowBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                jt.setRowSelectionAllowed(rowBox.isSelected());
                cellBox.setSelected(jt.getCellSelectionEnabled());
            }
        });

        buttonPanel.add(new JLabel("Selections allowed:"));
        buttonPanel.add(cellBox);
        buttonPanel.add(columnBox);
        buttonPanel.add(rowBox);

        columnPanel = new JPanel();
        ListSelectionModel csm = jt.getColumnModel().getSelectionModel();
        JLabel columnCounter = new JLabel("Selected Column Indices:");
        csm.addListSelectionListener(new SelectionDebugger(columnCounter, csm));
        columnPanel.add(new JLabel("Selected columns:"));
        columnPanel.add(columnCounter);

        rowPanel = new JPanel();
        ListSelectionModel rsm = jt.getSelectionModel();
        JLabel rowCounter = new JLabel("Selected Row Indices:");
        rsm.addListSelectionListener(new SelectionDebugger(rowCounter, rsm));
        rowPanel.add(new JLabel("Selected rows:"));
        rowPanel.add(rowCounter);

        controlPanel = new JPanel(new GridLayout(0, 1));
        controlPanel.add(buttonPanel);
        controlPanel.add(columnPanel);
        controlPanel.add(rowPanel);

        getContentPane().add(controlPanel, BorderLayout.SOUTH);
    }

    public static void main(String args[]) {
        MainClass se = new MainClass();
        se.setVisible(true);
    }

    public class SelectionDebugger implements ListSelectionListener {
        JLabel debugger;

        ListSelectionModel model;

        public SelectionDebugger(JLabel target, ListSelectionModel lsm) {
            debugger = target;
            model = lsm;
        }

        public void valueChanged(ListSelectionEvent lse) {
            if (!lse.getValueIsAdjusting()) {
                StringBuffer buf = new StringBuffer();
                int[] selection = getSelectedIndices(model.getMinSelectionIndex(), model.getMaxSelectionIndex());
                if (selection.length == 0) {
                    buf.append("none");
                } else {
                    for (int i = 0; i < selection.length - 1; i++) {
                        buf.append(selection[i]);
                        buf.append(", ");
                    }
                    buf.append(selection[selection.length - 1]);
                }
                debugger.setText(buf.toString());
            }
        }

        protected int[] getSelectedIndices(int start, int stop) {
            if ((start == -1) || (stop == -1)) {
                return new int[0];
            }

            int guesses[] = new int[stop - start + 1];
            int index = 0;
            for (int i = start; i <= stop; i++) {
                if (model.isSelectedIndex(i)) {
                    guesses[index++] = i;
                }
            }

            int realthing[] = new int[index];
            System.arraycopy(guesses, 0, realthing, 0, index);
            return realthing;
        }
    }
}