Java - настройка цвета фона определенной ячейки - PullRequest
0 голосов
/ 24 марта 2012

У меня есть показанный ниже код:

if ("1".equals(tmp.get(h))) {
   tmp2[0][h] = 1;
   for (int j = 0; j < truthTable.getModel().getColumnCount(); j++) {
      renderer = (DefaultTableCellRenderer) truthTable.getCellRenderer(0,
            j);
      renderer.setBackground(Color.yellow);
   }
}

Метод getCellRenderer содержит строку параметров и столбец и должен установить строку 0 с желтым фоном, но вместо этого он устанавливает всю таблицу вжелтый фонЯ в замешательстве, так что лучшее решение для этого?

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

Наведите указатель мыши на стол.

package test;

import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class SingleCellColor {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                String[][] data = {
                        {"a", "1","2","3"},
                        {"b", "3","4","5"},
                        {"c", "6","7","8"}
                };
                String[] columns = {
                    "Letter", "Num 1", "Num2 ", "Num 3" 
                };
                DefaultTableModel tableModel = new DefaultTableModel(data, columns);

                final SingleCellRenderer renderer = new SingleCellRenderer(); 
                final JTable table = new JTable(tableModel);
                table.setDefaultRenderer(new Object().getClass(), renderer);
                table.addMouseMotionListener(new MouseAdapter() {
                    @Override
                    public void mouseMoved(MouseEvent me) {
                        Point p = me.getPoint();
                        renderer.setColumnHightlight(table.columnAtPoint(p));
                        renderer.setRowHighlight(table.rowAtPoint(p));
                        table.repaint();
                    }
                });
                JScrollPane tableScroll = new JScrollPane(table);

                JOptionPane.showMessageDialog(null, tableScroll);
            }
        });
    }
}

class SingleCellRenderer extends DefaultTableCellRenderer {

    private static final long serialVersionUID = 1L;

    int rowHighlight = -1;
    int colHighlight = -1;

    @Override
    public Component getTableCellRendererComponent(JTable table,
            Object value,
            boolean isSelected,
            boolean hasFocus,
            int row,
            int column) {
        Component c = super.getTableCellRendererComponent(
                table, value, isSelected, hasFocus, row, column);
        c.setBackground(Color.ORANGE);
        if (c instanceof JComponent) {
            boolean isFocused = (colHighlight == column && rowHighlight == row);
            ((JComponent)c).setOpaque(isFocused);
        }
        return c;
    }

    public void setColumnHightlight(int colHighlight) {
        this.colHighlight = colHighlight;
    }

    public void setRowHighlight(int rowHighlight) {
        this.rowHighlight = rowHighlight;
    }
}
2 голосов
/ 24 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...