JTabel Selection listener Bsp.

Salo

Aktives Mitglied
SaloMitglied
Hi,

könnte mir jemand bitte kurz ein kleines Beispielprogramm zeigen,
in dem eine Tabelle in Swing angezeigt wird und wenn man eine Zelle anklickt,
in der Konsole ausgegeben wird, welche Zelle man angeklickt hatt.

Ich brauche das nur weil ich das Toturial von Oracle an dem Punkt nicht ganz verstanden habe und in dem Beispiel nicht ganz verstehe was genau dafür nötig ist.
Vielen Dank schonmal im vorraus.
Gruß Salo
 
Dazu gibt es doch Beispiele wie Sand am Meer.
Welchen Teil verstehst du denn nicht? Mit einer genaueren Frage wäre dir schneller geholfen..

Du musst der Tabelle einen ListSelectionListener hinzufügen und dann dort drin das entsprechende Verhalten implementieren.
 
Ok.
Hatt zwar bisschen gedauert habe jetzt aber folgendes geschrieben: (bzw. größtenteils "kopiert")

Java:
import javax.swing.JFrame;
import javax.swing.JList;
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;

/**
 *
 * @author Salo
 */
public class TableTester extends AbstractTableModel {
 
    JTable table;
    JList list;
    ListSelectionModel listSelectionModel = new ListSelectionModel() {
        @Override
        public void setSelectionInterval(int index0, int index1) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void addSelectionInterval(int index0, int index1) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void removeSelectionInterval(int index0, int index1) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public int getMinSelectionIndex() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public int getMaxSelectionIndex() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public boolean isSelectedIndex(int index) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public int getAnchorSelectionIndex() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void setAnchorSelectionIndex(int index) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public int getLeadSelectionIndex() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void setLeadSelectionIndex(int index) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void clearSelection() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public boolean isSelectionEmpty() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void insertIndexInterval(int index, int length, boolean before) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void removeIndexInterval(int index0, int index1) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void setValueIsAdjusting(boolean valueIsAdjusting) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public boolean getValueIsAdjusting() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void setSelectionMode(int selectionMode) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public int getSelectionMode() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void addListSelectionListener(ListSelectionListener x) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void removeListSelectionListener(ListSelectionListener x) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    };

    public TableTester() {
        super();
    
        table = new JTable(this);

        listSelectionModel = list.getSelectionModel();
        table.setSelectionModel(listSelectionModel);
        listSelectionModel.addListSelectionListener(new SharedListSelectionHandler());
    }

    @Override
    public int getRowCount() {
        return 100;
    }

    @Override
    public int getColumnCount() {
        return 3;
    }

    @Override
    public Object getValueAt(int row, int col) {
        if (col == 0) {
            return ""/* + row*/;
        } else if (col == 1) {
            return "" + (row * row);
        } else {
            return "" + (row * row * row);
        }
    }

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return columnIndex == 1 || columnIndex == 2;
    }
 
    class SharedListSelectionHandler implements ListSelectionListener {
        public void valueChanged(ListSelectionEvent e) {
            ListSelectionModel lsm = (ListSelectionModel)e.getSource();

            int firstIndex = e.getFirstIndex();
            int lastIndex = e.getLastIndex();
            boolean isAdjusting = e.getValueIsAdjusting();
            System.out.println("Event for indexes "
                          + firstIndex + " - " + lastIndex
                          + "; isAdjusting is " + isAdjusting
                          + "; selected indexes:");

            if (lsm.isSelectionEmpty()) {
                System.out.println(" <none>");
            } else {
                // Find out which indexes are selected.
                int minIndex = lsm.getMinSelectionIndex();
                int maxIndex = lsm.getMaxSelectionIndex();
                for (int i = minIndex; i <= maxIndex; i++) {
                    if (lsm.isSelectedIndex(i)) {
                        System.out.println(" " + i);
                    }
                }
            }
        }
    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        JFrame f = new JFrame();
        f.getContentPane().add(new JScrollPane(
                new JTable(new TableTester())));
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }

}

gibt mir aber folgende exception:

Java:
Exception in thread "main" java.lang.NullPointerException
    at Tables.TableTester.<init>(TableTester.java:136)
    at Tables.TableTester.main(TableTester.java:199)
/home/pi/.cache/netbeans/8.2/executor-snippets/run.xml:53: Java returned: 1

Was habe ich hier Falsch gemacht?
Ist das überhaupt der richtige Ansatz?

Danke schonmal für eure Hilfe,
Salo
 

Neue Themen


Zurück
Oben