2016-08-25 4 views
0

В моем приложении java я хочу установить цвет, а также поведение, когда оно выбрано. Для этого я написал пользовательскую реализацию TableCellRenderer, и он работает так, как я хочу. Но есть что-то я до сих пор путают о ...Swing JTable с пользовательским TableCellRenderer

Вот реализация TableCellRenderer:

public class AccountMovementTableCellRenderer extends JLabel implements TableCellRenderer{ 
    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){  
     //My implementation here... 
     return this; 
    } 
} 

А вот создание JTable:

AccountMovementTableCellRenderer accountMovementCellRenderer = new AccountMovementTableCellRenderer(); 
entryTable = new JTable(entryModel){ 
    private static final long serialVersionUID = 1L; 

    @Override 
    public TableCellRenderer getCellRenderer(int row, int column){ 
     return accountMovementCellRenderer; 
    } 
}; 

Я создаю только один экземпляр моего CellRenderer, но я ожидал один CellRenderer на ячейку, и я был удивлен, что он работает таким образом ... Содержимое и цвет для каждой ячейки разные, но он всегда использует один и тот же экземпляр CellRenderer, так как это могло бы работать ?

ответ

3

Компонент, который TableCellRenderer.prepareRenderer возвращается повторно используется для отображения содержимого JTable - в вашем случае вашего рендер расширяет JLabel (вы можете могли бы просто расширить DefaultTableCellRenderer) - это JLabel используется для рисования содержимого JTable. Метод prepareRenderer используется для настройки JLabel для каждой ячейки перед рендерингом. Процитировать Oracle's tutorial on the JTables

Вы можете ожидать, что каждая ячейка в таблице будет компонентом. Однако по соображениям производительности таблицы Swing реализуются по-разному.

Вместо этого для визуализации всех ячеек, которые содержат один и тот же тип данных, обычно используется рендеринг с одной ячейкой. Вы можете думать о рендерере как о настраиваемой чернильной печати, которую используется таблицей для маркировки соответствующих отформатированных данных на каждую ячейку. Когда пользователь начинает редактировать данные ячейки, редактор ячейки берет на себя ячейку, контролируя поведение редактирования ячейки.

2

Один экземпляр средства визуализации создает уникальное изображение для каждой ячейки с каждым изображением, отражающим состояние этой ячейки, на основе вашего кода выше.

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