2013-04-07 5 views
1

Пример, который я нашел: http://www.java2s.com/Code/Java/Swing-Components/ButtonTableExample.htm показать, как создать JTable с указанным столбцом (кнопка). Он работает правильно, но моя проблема в том, что мне нужно использовать AbstractTableModel вместо DefaultTableModel (как показано на примере).AbstractTableModel и редактор ячейки

Так я создал свой собственный TableModel, который простирается AbstractTableModel:

public class TableModel extends AbstractTableModel { //..
}

и заменить:

DefaultTableModel dm = new DefaultTableModel(); 
dm.setDataVector(new Object[][] { { "button 1", "foo" }, 
    { "button 2", "bar" } }, new Object[] { "Button", "String" }); 

JTable table = new JTable(dm); 

для:

JTable table = new JTable(new TableModel()); 

А потом ничего не происходит, когда я нажмите кнопку в некоторой строке. Какие-либо предложения?

+0

', что мне нужно использовать AbstractTableModel вместо DefaultTableModel' пожалуйста, почему, есть особая причина, чтобы ограничить что-то, отменить все, что который реализуется как метод непосредственно в 'DeafultTableModel',' 1.' вот куча вопросов и ответов о том, как написать AbstracTableModel, '2.' щелкнуть мышью тегом AbstractTableModel под ваш вопрос,' 3.' искать Java & Swing & JTable & AbstractTableModel, '4.' читать учебник Oracle, как использовать таблицы – mKorbel

ответ

4

Убедитесь, что вы переопределили метод AbstractTableModel.isCellEditable для возврата true для столбца с кнопкой, иначе редактор не будет запущен. Этот метод по умолчанию возвращает false.

Кроме того, убедитесь, что вы переопределили getColumnName(), чтобы вернуть собственное имя, так как образец, который вы связали, пытается найти столбец с именем «Button» для настройки редактора.

Вы можете найти Table Button Column применение @camickr полезно.

Эта демонстрационная модель хорошо работает с редактором и визуализатора из связанного образца:

public class DemoTableModel extends AbstractTableModel { 
    @Override 
    public boolean isCellEditable(int rowIndex, int columnIndex) { 
     return (columnIndex == 0); 
    } 

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

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

    @Override 
    public String getColumnName(int columnIndex) { 
     switch (columnIndex) { 
     case 0: 
      return "Button"; 
     case 1: 
      return "Value"; 
     } 
     return null; 
    } 

    @Override 
    public Object getValueAt(int rowIndex, int columnIndex) { 
     switch (columnIndex) { 
     case 0: 
      return "Button"; 
     case 1: 
      return "Value"; 
     } 
     return null; 
    } 
} 
+1

overriding AbstractTableModel.isCellEditable переместил мою проблему. Спасибо за ваше время. –

+0

@yebieoLL Добро пожаловать! :) – tenorsax

Смежные вопросы