it-swarm.com.de

Deaktivieren Sie die Benutzerbearbeitung in JTable

Wenn eine JTable-Komponente erstellt wird, ist die Zellenbearbeitung standardmäßig aktiviert. Wie kann ich verhindern, dass der Benutzer den Inhalt einer JTable bearbeitet?

26
Parag

Eine JTable verwendet ein AbstractTableModel-Objekt. Dies ist die Sache, die Sie in den Konstruktor der JTable übergeben. Sie können Ihr eigenes AbstractTableModel wie folgt schreiben

public class MyTableModel extends AbstractTableModel {

      public boolean isCellEditable(int row, int column){  
          return false;  
      }

}

und initialisieren Sie dann Ihre JTable als 

JTable myTable = new JTable(new MyTableModel());
39
richard

Sie können eine JTable mit folgendem Code erstellen:

    JTable jTable = new JTable() {
        private static final long serialVersionUID = 1L;

        public boolean isCellEditable(int row, int column) {                
                return false;               
        };
    };

Im Grunde überschreiben wir isCellEditable und geben immer falsch zurück. Dadurch wird ein nicht editierbares JTabel erstellt.

41
Rahul Borkar
myTable.setDefaultEditor(Object.class, null);
13
Aïssa Ghouti

Hast du einfach versucht:

JTable table = new JTable();
table.setEnabled(false);

Über JComponent.setEnabled (boolean) es sagt:

Legt fest, ob diese Komponente aktiviert ist oder nicht. Eine aktivierte Komponente kann auf Benutzereingaben reagieren, während eine Komponente, die nicht aktiviert ist, nicht auf Benutzereingaben reagieren kann. Einige Komponenten können ihre visuelle Darstellung ändern, wenn sie deaktiviert sind, um dem Benutzer eine Rückmeldung zu geben, dass er keine Eingaben entgegennehmen kann. 

Wenn es um JTable geht, scheint es überhaupt kein visuelles Feedback zu geben. Mit dem Vorteil, immer noch auf die Spaltenüberschriften klicken zu können. Und in meiner Implementierung konnte die Anwendung immer noch den Inhalt der Zellen ändern.

4
brat

Hallo, ich arbeite viel an Java, also gebe ich dir meinen Weg: Es gibt zwei Möglichkeiten, die erste unter Netbeans. Passen Sie den Code an und machen Sie ihn so:

JTArticleJPAddArrticle = new javax.swing.JTable();

JTArticleJPAddArrticle.setBackground(new Java.awt.Color(204, 204, 255));

JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

},
new String [] {
    "Reference","Libellé","Marque","Prix d'achat","Prix de vente","Quantité","Total","Etat"
}
){
public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
}
});



jScrollPane8.setViewportView(JTArticleJPAddArrticle);

Mein anderer Weg ist es, eine Instanz des Tabellenmodells zu erstellen. Dies ist der zweite Weg: 

model=new DefaultTableModel(head, 0){

    @Override
    public boolean isCellEditable(int i, int i1) {
        return false; //To change body of generated methods, choose Tools | Templates.
    }

   };
jtable.setmodel(model);

Genieße, das funktioniert gut für mich. Alles, was ich tun möchte, ist, euch zu helfen, weil mir früher viel geholfen wurde.

Ich weiß, dass ich zu spät komme, aber ich hoffe, dass jemand davon Gebrauch macht. Sie können einfach einen Mauslistener wie folgt hinzufügen:

jtable.addMouseListener( new MouseAdapter () {
    @Override
    public void mouseClicked ( MouseEvent e ) {
        columnIndex = replacedAssets.getSelectedColumn ();
        System.out.println ( "Double click on jtable" );
        if ( columnIndex == 1 || columnIndex == 2 ) {
            JOptionPane.showMessageDialog ( parent , "Editing this Field may cause error in the data." , "Error Edit Not Permitted For This Field" , JOptionPane.ERROR_MESSAGE );
        }
    }
});

dieser Code verhindert, dass die Spalten der Indizes 1 und 2 bearbeitet werden. Sie können die if-Bedingung entfernen, damit dies für alle Spalten funktioniert.

0
Sparks
        tm = new javax.swing.table.DefaultTableModel()
                 {
                      public Class<?> getColumnClass(int column)
                      {
                        switch(column)
                        {
                        case 0:
                          return String.class;
                        case 1:
                          return String.class;
                        case 2:
                          return String.class;
                        case 3:
                          return String.class;
                        case 4:
                          return String.class;
                        case 5:
                              return String.class;
                            case 6:
                              return String.class;
                            case 7:
                              return String.class;
                            case 8:
                              return String.class;
                            case 9:
                                  return String.class;
                                case 10:
                                  return String.class;
                                case 11:
                                    return Boolean.class;

                          default:
                            return String.class;
                        }
                      }

                      @Override
                      public boolean isCellEditable(int row, int column) {
                         /* Set the 11th column as editable and rest non-
                              editable */
                          if(column==11){
                              return true;
                          }else{
 //all other columns to false
                         return false;
                          }
                      }
                    };
    table = new javax.swing.JTable(tm);
0
Kavitha yadav

Bei Netbeans können Sie mit der rechten Maustaste auf die Tabelle klicken und auf den Tabelleninhalt klicken. Dann gehen Sie zur Registerkarte "Spalte" und deaktivieren das Kontrollkästchen "Bearbeitbar". Schöne Grüße!!

0
Yahrs