JTable
Düzenlenemez nasıl yapılır ? Kullanıcılarımın hücrelerdeki değerleri çift tıklayarak düzenleyebilmelerini istemiyorum.
JTable
Düzenlenemez nasıl yapılır ? Kullanıcılarımın hücrelerdeki değerleri çift tıklayarak düzenleyebilmelerini istemiyorum.
Yanıtlar:
Bir TableModel
.
Şöyle bir sınıf tanımlayın:
public class MyModel extends AbstractTableModel{
//not necessary
}
Aslında isCellEditable()
ise false
bunu ihmal edebilir, böylece varsayılan olarak. (bkz: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )
Ardından, setModel()
yönteminizi kullanın JTable
.
JTable myTable = new JTable();
myTable.setModel(new MyModel());
public void
yöntemin bir boolean döndürmesini sağlayamazsınız .
isCellEditable
İsCellEditable yöntemini geçersiz kılabilir ve istediğiniz gibi uygulayabilirsiniz, örneğin:
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
veya
//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
//Only the third column
return column == 3;
}
};
table.setModel(tableModel);
JTable'ınız kaybolursa not alın
Bunu JTable
kullandığınızda kayboluyorsa, bunun nedeni büyük olasılıkla yapıcıyı kullanmanız gerektiğidir DefaultTableModel(Object[][] data, Object[] columnNames)
.
//instance table model
DefaultTableModel tableModel = new DefaultTableModel(data, columnNames) {
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setModel(tableModel);
table.setDefaultEditor(Object.class, null);
sadece ekle
table.setEnabled(false);
benim için iyi çalışıyor.
TableModel'i bir dizi değerden otomatik olarak oluşturuyorsanız ("yeni JTable (Vektör, Vektör)" ile), düzenleyicileri sütunlardan kaldırmak belki daha kolaydır:
JTable table = new JTable(my_rows, my_header);
for (int c = 0; c < table.getColumnCount(); c++)
{
Class<?> col_class = table.getColumnClass(c);
table.setDefaultEditor(col_class, null); // remove editor
}
Düzenleyiciler olmadan veriler düzenlenemez.
new JTable(Vector, Vector)
ve benim için çalıştım. Hücrede editöre ihtiyacım yok, bu yüzden benim oyum var.
Bunu kullandım ve işe yaradı: çok basit ve iyi çalışıyor.
JTable myTable = new JTable();
myTable.setEnabled(false);
yeni DefaultCellEditor sınıfı oluşturun:
public static class Editor_name extends DefaultCellEditor {
public Editor_name(JCheckBox checkBox) {
super(checkBox);
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return false;
}
}
ve setCellEditor kullanın:
JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));