Ich habe einen jTable-Kalender, der gut funktioniert und ich möchte nur, dass der Benutzer nichts bearbeiten kann. Wie kann ich es tun?JAVA jTable - Wie kann man alle Zellen nicht editierbar machen?
Vielen Dank !!
PS: Ich benutze Netbeans 6.9.
Ich habe einen jTable-Kalender, der gut funktioniert und ich möchte nur, dass der Benutzer nichts bearbeiten kann. Wie kann ich es tun?JAVA jTable - Wie kann man alle Zellen nicht editierbar machen?
Vielen Dank !!
PS: Ich benutze Netbeans 6.9.
einfach zurückgeben false
im isCellEditable() Umsetzung Ihrer Tablemodel
in Ihrem Tischmodell (das Abstract erstreckt), müssen Sie als solche implementieren:
public class MyTableModel extends AbstractTableModel {
//table is not editable
public boolean isCellEditable() {
return false;
}
}
Dies ist eine gute Lösung. Aber beachten Sie: das TableModel erweitert möglicherweise DefaultTableModel in Cristian's Code. Es gibt normalerweise keinen guten Grund, AbstractTableModel zu erweitern, wenn Sie einfach DefaultTableModel erweitern können. – jzd
Nun, normalerweise verwende ich nicht DefaultTableModel, da Sie keinen eigenen Datentyp angeben können und, was noch wichtiger ist, Vektoren von Vektoren verwendet, um Dinge zu speichern, die lästig werden können. Aber ja, für die einfache alte Bequemlichkeit ist DefaultTableModel die leichtere Wahl für solch eine kleine Aufgabe, da es die meisten Implementierungen zur Verfügung stellt! persönlich vermeide ich es jedoch. –
Try dieser Code; es ist einfach und leicht zu verstehen.
DefaultTableModel model =new DefaultTableModel(6,8);
table = new JTable(model){
private static final long serialVersionUID = 2485117672771964339L;
@Override
public boolean isCellEditable (int row, int column)
{
return editable;
}
};
Sollte es nicht "JTable" anstatt "JTAble" sein? –
Danke ich habe es behoben. – Alejandro
Okay, vielleicht ist dies ein neues Feature, aber ich fand, dass ich verwenden könnte:
JTable table = new JTable();
...
table.setEnabled(false);
Und das hat den Job für mich.
modell.cellEditable! = View.enabled – kleopatra
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
@Matthew - wenn ich versuche, dies zu implementieren, macht es meinen Tisch verschwinden. Ist es wichtig, dass meine Tabelle in einem JScrollPane ist? So: 'JScrollPane editPatDocScrollPane = neu JScrollPane(); JTable editPatDocTable = neue JTable (Daten, Spaltennamen); editPatDocScrollPane.setViewportView (editPatDocTable); ' – Jona
@ Jona Ich sehe nicht, warum das einen Unterschied machen sollte. Die Zellen sind immer noch da, sie sind nur schreibgeschützt. Wenn Sie Hilfe bei Ihrer Situation benötigen, schlage ich vor, dass Sie eine neue Frage mit einem eigenständigen Beispiel öffnen, das den verschwindenden Tisch demonstriert. –
Ich hatte das gleiche Problem. Was ich getan habe, war JTable Tabelle = neue JTable (Daten, SpalteNamen); und dann setModel. Aber das überschreibt Ihre Daten und Spaltennamen! Daher müssen Sie Ihr defaultTableModel mit Ihren Daten und columnNames initialisieren und es dann an Ihre JTable übergeben. – Lyth
Wird das verhindern, dass die Benutzer auf die Werte klicken und sie ändern. Das hält Leute wahrscheinlich davon ab, Daten in eine Datei zurück zu speichern, wenn sie mit einer bedingten Anweisung überprüfen. –
Lass mich das fragen. Wenn Sie ein JTable-Modell implementieren, erstellen Sie im Grunde die Methoden, die das zweidimensionale Array durchsuchen. Wenn Sie also isCellEditable = false setzen, schreiben Sie einfach keine Daten zurück in das Array. Und wenn Sie auf Speichern klicken, wird die neue Information in der JTable in das Objekt-Array geschrieben oder wenn Sie einen Keylistener auf einem der Schlüssel haben. Wenn Schlüsseländerungen neue Werte schreiben. Was, wenn Sie nicht möchten, dass sie in die Kästchen klicken können und sogar die Werte an diesem Punkt ändern können. –