JTable, не понимаю, как установить цвет ячейки при щелчке мыши

Хорошо, я должен быть совершенно безмозглым, но я не могу реализовать код, необходимый для установки (постоянно) цвета фона выбранной (нажатой) ячейки в моем JTable. Я прочитал большинство ответов на этом сайте, но до сих пор не понимаю.

Я использую метод подготовленного Renderer(), но не понимаю, почему он не работает?

table.addMouseListener(
    new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent m) {
        row = table.getSelectedRow();
        column = table.getSelectedColumn();
        }
    }
);

table = new JTable(data, columnNames) {
        public Component prepareRenderer(TableCellRenderer rend, int r, int k) {
            Component g = super.prepareRenderer(rend, row, column);
            g.setBackground(Color.BLUE);
            return g;
        }
};

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

Component g = super.prepareRenderer(rend, 1, 1);
g.setBackground(Color.BLUE);
return g;

он просто рисует всю таблицу, а не ячейку в строке = 1, столбце = 1??? Я просто не понимаю...


person GreenManXY    schedule 30.03.2014    source источник
comment
Возможно, это - это то, что вы хотите, и это кажется дубликатом той же темы   -  person Frakcool    schedule 31.03.2014


Ответы (1)


он просто рисует всю таблицу, а не ячейку в строке = 1, столбце = 1???

Метод prepareRenderer() вызывается для каждой перерисовываемой ячейки. Это делается динамически, когда пользователь выбирает строку или вкладки для перехода к новой ячейке или щелкает ячейку.

установить (навсегда) цвет фона выбранной (нажатой) ячейки в моем JTable.

Возможно, вы можете создать объекты Set of Point для представления ячеек, которые вы хотите закрасить другим цветом. Поэтому, когда вы нажимаете на ячейку, вы создаете объект Point для строки/столбца, а затем добавляете Point в набор.

Затем в методе prepareRenderer(...) вы создаете новую точку, представляющую строку/столбец, который вы собираетесь визуализировать. Если эта точка находится в вашем наборе, вы меняете цвет фона.

person camickr    schedule 30.03.2014
comment
Можете ли вы опубликовать код, объясняющий, что вы подразумеваете под «набором точек»? Я не видел этого решения ни в одном из других ответов. - person GreenManXY; 31.03.2014