Создание ячейки в редактируемой JTable - значение ячейки по умолчанию - PullRequest
3 голосов
/ 26 января 2009

Я работаю с Java и пытаюсь сделать ячейку в JTable доступной для редактирования. Мой класс реализует TableModel и расширяет AbstractTableModel (так что я могу использовать метод fireTableCellUpdated(rowIndex, columnIndex)), и я реализовал методы isCellEditable() и setValueAt(). Я представляю одну ячейку в таблице как объект класса Cell.

Теперь вот моя проблема: ячейка уже доступна для редактирования, и когда я щелкаю по ней, в ячейке появляется курсор, однако в ячейке появляется также строка, подобная этой: Cell@1e63e3d. Я удаляю эту строку и помещаю в ячейку значение, которое я хочу поместить, затем нажимаю Enter, и он работает нормально. Но я хочу, чтобы при нажатии на ячейку там ничего не появлялось, пустая строка, а не Cell@1e63e3d. И я не знаю, как установить эту пустую строку по умолчанию и где.

Класс My Cell хранит информацию (характеристики) о ячейке, такую ​​как цвет ячейки, и его значение в качестве переменных экземпляра.

Пожалуйста, скажите мне, если вам нужна дополнительная информация.

Ответы [ 2 ]

7 голосов
/ 26 января 2009

Вы установили TableCellRenderer и TableCellEditor для вашего JTable?

Для отображения ячейки , TableCellRenderer используется для визуализации содержимого для местоположения из TableModel. По умолчанию он будет использовать toString метод Object в этом месте, так что это объяснит, что Cell@1e63e3d отображается в ячейке - это результат вызова метода toString на вашем Cell объект.

Путем написания пользовательского средства визуализации ячеек (класса, реализующего TableCellRenderer), вы сможете вернуть Component, который вы хотите использовать для отображения объекта Cell, используя getTableCellRendererComponent метод. В вашем случае вы можете создать подкласс JLabel, который реализует TableCellRenderer и установит содержимое метки так, чтобы оно отражало содержимое вашего Cell объекта.

Что касается редактирования ячейки , TableCellEditor получает Object от TableModel, когда вы хотите отредактировать ячейку с помощью JTable. TableCellEditor вернет Component, который используется для редактирования содержимого ячейки (Object) с использованием метода getTableCellEditorComponent.

В случае, если вы предоставите, я думаю, что создание JTextField, которое реализует интерфейс TableCellEditor, сможет выполнить эту работу за вас. Когда вы переопределяете getTableCellEditorComponent, убедитесь, что у вас есть экземпляр объекта Cell (то есть object instanceof Cell), и, если это так, инициализируйте ваш JTextField, чтобы он содержал содержимое вашего Cell объекта, который вы хотите для отображения или редактирования.

Рекомендуемое чтение: Я обнаружил, что Рендеринг ячеек в статье Swing по компоненту JTable от IBM developerWorks весьма полезен при изучении работы с JTable s и их рендерингом ячеек Особенности редактирования. В частности, могут представлять интерес разделы Создание пользовательских средств визуализации и Редактирование ячеек таблицы .

1 голос
/ 26 января 2009

Используете ли вы соответствующий TableCellEditor для отображения компонента для редактирования?

class MyTableCellEditor
        extends DefaultCellEditor
{
    @Override
    public Component getTableCellEditorComponent(
            JTable table,
            Object value,
            boolean isSelected,
            int row,
            int column)
    {
        final JTextField c = (JTextField) super.getTableCellEditorComponent(
            table,
            ((Cell) value).text, // edit the text field of Cell
            isSelected,
            row,
            column);

        c.selectAll(); // automatically select the whole string in the cell
        return c;
    }
}

Вам необходимо указать вашей таблице использовать этот пользовательский редактор ячеек в дополнение к пользовательскому средству визуализации ячеек.

myTable.setDefaultEditor(Cell.class, new MyTableCellEditor());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...