Создал свою модель для таблицы и после этого когда вхожу в режим редактирования (двойной клик по ячейке) могу редактировать строку, но когда жму Enter или ячейка теряет фокус значение остается прежним. Изменить его никак не получается. Уже менял CellEditor на JSpinner, но все равно после окончания редактирования значение остается прежним. В чем может быть проблема? Приведу фрагменты кода где у меня работа с таблицей. Модель: | Код | import javax.swing.table.AbstractTableModel; import java.util.ArrayList;
public class BooksTableModel extends AbstractTableModel { public static final int NUMBER_COLUMN = 0; public static final int NAME_COLUMN = 1; public static final int AUTHOR_COLUMN = 2; public static final int PUBLISHER_COLUMN = 3; public static final int YEAR_COLUMN = 4; public static final int EDITION_COLUMN = 5; public static final int REPRINT_COLUMN = 6; public static final int ISBN_COLUMN = 7; public static final int COUNT_COLUMN = 8; public static final int AVAILABLE_COLUMN = 9; public static final int NOTES_COLUMN = 10;
public static final int COLUMN_COUNT = 11;
//private final ArrayList<Book> books = new ArrayList<Book>();
private void add(ArrayList<Book> newBooks) { int first = Client.books.size(); int last = first + newBooks.size() - 1; Client.books.addAll(newBooks); fireTableRowsInserted(first, last); }
private void add(Book book) { int index = Client.books.size(); Client.books.add(book); fireTableRowsInserted(index, index); }
public int getRowCount() { return Client.books.size(); }
public int getColumnCount() { return COLUMN_COUNT; }
public Book getBook(int row) { return Client.books.get(row); }
public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); }
public Object getValueAt(int row, int column) { Book book = getBook(row); switch (column) { case NUMBER_COLUMN: return book.getId(); case NAME_COLUMN: return book.getName(); case AUTHOR_COLUMN: return book.getAuthor(); case PUBLISHER_COLUMN: return book.getPublisher(); case YEAR_COLUMN: return book.getYear(); case EDITION_COLUMN: return book.getEdition(); case REPRINT_COLUMN: return book.getReprint(); case ISBN_COLUMN: return book.getIsbn(); case COUNT_COLUMN: return book.getCount(); case AVAILABLE_COLUMN: return book.getAvailable(); case NOTES_COLUMN: return book.getNotes(); } return null; }
public boolean isCellEditable(int rowIndex, int colIndex) { return true; // allow the editing of any cell } }
|
таблица вставляется на панель: | Код | JTable booksTable; BooksTableModel booksTableModel; booksTableModel = new BooksTableModel(); booksTable = new JTable(booksTableModel); booksTable.setColumnModel(createTableColumnModel()); booksTable.setAutoCreateRowSorter(true); westPanel.add(new JScrollPane(booksTable), BorderLayout.CENTER);
|
метод createTableColumnModel() в котором создается ColumnModel | Код | private TableColumnModel createTableColumnModel() { DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
RowRenderer cellRenderer = new RowRenderer();
TableColumn column = new TableColumn(); column.setModelIndex(BooksTableModel.NUMBER_COLUMN); column.setHeaderValue("Number"); column.setPreferredWidth(10); column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.NAME_COLUMN); column.setHeaderValue("Name"); column.setPreferredWidth(200); column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.AUTHOR_COLUMN); column.setHeaderValue("Author"); column.setPreferredWidth(80); column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.PUBLISHER_COLUMN); column.setHeaderValue("Publisher"); column.setPreferredWidth(60); column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.YEAR_COLUMN); column.setHeaderValue("Year"); column.setPreferredWidth(10); column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.EDITION_COLUMN); column.setHeaderValue("Edition"); column.setPreferredWidth(10); column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.REPRINT_COLUMN); column.setHeaderValue("Reprint"); column.setPreferredWidth(10); column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.ISBN_COLUMN); column.setHeaderValue("ISBN"); column.setPreferredWidth(30); column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.COUNT_COLUMN); column.setHeaderValue("Count"); column.setPreferredWidth(10); //column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.AVAILABLE_COLUMN); column.setHeaderValue("Avaible"); column.setPreferredWidth(10); column.setCellEditor(new SpinnerEditor()); //column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
column = new TableColumn(); column.setModelIndex(BooksTableModel.NOTES_COLUMN); column.setHeaderValue("Notes"); column.setPreferredWidth(50); column.setCellRenderer(cellRenderer); columnModel.addColumn(column);
return columnModel; }
|
Добавлено через 11 минут и 47 секундОпределил метод setValueAt() в классе BooksTableModel и все заработало.
--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках. [color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
|