2016-04-12 21 views
0

Ich habe meine JTable-TblList benannt und wollte, dass eine bestimmte Spalte nicht editierbar ist. Ich habe den folgenden Code gefunden, der den Job erledigen sollte, aber ich kann nicht für das Leben von mir es auf meinem vorhandenen Tisch arbeiten lassen. Ich denke, meine Frage ist insbesondere, wie rufe ich die folgenden Codes auf meiner bestehenden Tabelle namens TblList gesetzt werden?Eine JTABLE-Spalte nicht editierbar machen

JTable model = new JTable(){ 

    @Override 
    public boolean isCellEditable(int row, int column){ 
     return column==3 false; 
    }; 
}; 
+1

Das wird nicht kompilieren. Gibt es "column == 3" (true) oder "false" (false) zurück. Versuchen Sie "Return column == 3? False: true;" – Stefan

+2

Oder einfach 'Spalte zurück! = 3;'. – Kayaman

+0

Ich habe das auch gesehen, aber wie kann ich es direkt auf meine vorhandene jtable anwenden? Wenn ich die Codes verwende, die ich gepostet habe, scheint es mir, dass es eine neue Tabelle erstellt und es mein vorhandenes JTable genauso belässt wie es ist. Bitte ertragen Sie mich, denn ich bin immer noch ein Neuling, wenn es darum geht. Vielen Dank! – joppiealiw

Antwort

2

Die Art und Weise, dies zu tun Ihre eigenen TableModel und überschreiben die public boolean isCellEditable(int rowIndex, int columnIndex); zu haben wäre. Als Faustregel sollten wir eine JTable Methode nicht überschreiben. Zu Ihrer Information ist das, was JTable tut - Teilnehmer den Anruf an das Datenmodell:

public boolean isCellEditable(int row, int column) { 
     return getModel().isCellEditable(convertRowIndexToModel(row), 
             convertColumnIndexToModel(column)); 
    } 

Die Art, wie wir es tun, ist: Schritt 1: Tischmodell erstellen:

public class SimpleTableModel extends DefaultTableModel { 
    @Override 
    boolean isCellEditable(int row, int col) { 
     // Your logic goes here 
    } 
} 

Schritt 2 : JTable

JTable table = new JTable (new SimpleTableModel()); 

an den Konstruktor eine Instanz dieser Klasse Pass ein funktionierendes Beispiel unten finden Sie (das ich schreibe in der Regel Code nicht der richtige Weg ist und Sie noch sollte aber nur um Ihnen ein Beispiel zu geben):

static class Table extends JFrame { 
     public Table() { 
      String[] columns = new String[] { 
       "Id", "Name", "Hourly Rate", "Part Time" 
      }; 

      //actual data for the table in a 2d array 
      Object[][] data = new Object[][] { 
       {1, "John", 40.0, false }, 
       {2, "Rambo", 70.0, false }, 
       {3, "Zorro", 60.0, true }, 
      }; 

      TableModel m = new AbstractTableModel() { 

       @Override 
       public Object getValueAt(int rowIndex, int columnIndex) { 
        return data[rowIndex][columnIndex]; 
       } 

       @Override 
       public int getRowCount() { 
        return data.length; 
       } 

       @Override 
       public int getColumnCount() { 
        return data[0].length; 
       } 

       @Override 
       public boolean isCellEditable (int row, int col) { 
        return false; 
       } 

      }; 

      //create table with data 
      JTable table = new JTable(m); 

      //add the table to the frame 
      this.add(new JScrollPane(table)); 

      this.pack(); 
      this.setVisible(true); 
     } 
    } 
+0

Ich würde Ihnen gerne sagen, dass ich ganz verstehe, was Sie gerade gesagt haben, aber ich verstehe wenig davon. Ich habe das Gefühl, dass ich irgendwo den Namen meiner JTable (tblList) eingeben muss, aber dann weißt du es besser als ich. Ich schätze Ihre Antwort jedoch. Ich werde sehen, was ich tun kann, um es weiter zu verstehen. – joppiealiw

+0

Hier ist ein [Tutorial] (https://docs.oracle.com/javase/tutorial/uiswing/components/table.html), das hilfreich sein könnte – Prashant

+1

@joppiealiw Swing verwendet eine Form von [Model-View-Controller] (http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93Controller), was bedeutet, dass das Modell von der Ansicht getrennt ist. Sie sollten in der Lage sein, Ihr Modell zu übernehmen und es auf verschiedene Instanzen anzuwenden von 'JTable' (oder wenden Sie mehrere Modelle auf eine einzelne Instanz von' JTable') und haben es funktioniert wie erwartet – MadProgrammer

Verwandte Themen