繁体   English   中英

单击按钮后如何更改JTable行的颜色

[英]How to change the color of JTable row after clicking a button

我想在单击按钮后更改JTable行的颜色。 我发现了许多示例,这些示例显示了如何使用不同颜色的行来初始化表,以及如何在选择行时更改颜色。 但是,我想知道单击JButton时更改颜色的正确方法是什么。

TableCellRenderer colorRenderer = new ColorRenderer();
table.setDefaultRenderer(String.class, colorRenderer);

private class ColorRenderer extends DefaultTableCellRenderer {

    private static final long serialVersionUID = 1L;

    @Override
    public Component getTableCellRendererComponent(
            JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        if (hasFocus) {
            setBackground(Color.cyan);
        } else if (isSelected) {
            setBackground(table.getSelectionBackground());
        } else {
            setBackground(table.getBackground());
        }
        return this;
    }
}

考虑到您正在按以下方式在JTable中加载数据:

public void fillTable(){
       List<String> columns = new ArrayList<String>();
       List<String[]> values = new ArrayList<String[]>();
        columns.add("col1");
        columns.add("col2");
        columns.add("col3");
        for (int i = 0; i < 100; i++) {
            values.add(new String[] {"val"+i+" col1","val"+i+" col2","val"+i+" col3"});
        }
        TableModel tableModel = new DefaultTableModel(values.toArray(new Object[][] {}), columns.toArray());
        tableName.setModel(tableModel);
    }

然后,您可以使用类似此类的类将呈现器设置为JTable

public class EvenOddRenderer implements TableCellRenderer {

        public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();

        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            DEFAULT_RENDERER.setHorizontalAlignment(JLabel.CENTER);
            Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(
                    table, value, isSelected, hasFocus, row, column);
            ((JLabel) renderer).setOpaque(true);
            Color foreground, background;
            Color alternate = new Color(0xC0, 0xC0, 0xF0);
            Color lightBlue = new Color(204, 204, 255);

            if (isSelected) {
                foreground = Color.black;
                background = Color.gray;
            } else {
                if (row % 2 == 0) {
                    foreground = Color.black;
                    background = Color.white;
                } else {
                    foreground = Color.black;
                    background = lightBlue;
                }
            }
            renderer.setForeground(foreground);
            renderer.setBackground(background);
            return renderer;
        }
    }

像这样 :

  TableCellRenderer renderer = new EvenOddRenderer();
  tableName.setDefaultRenderer(Object.class, renderer);
  tableName.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

加载JTable

然后,您可以使用setRowSelectionInterval()方法选择任何行:

     private void btn(java.awt.event.ActionEvent evt) { 
      int index = 0; 
      tableName.setRowSelectionInterval(index, index);
     }

在这里,您选择JTable的第一行

单击按钮后的JTable

在此示例中,您选择Color.gray作为JTable选择颜色

您可以确定更改

签出表格行渲染

这种方法也适用于每列中包含不同数据类型的表,因此您不必为每种数据类型创建自定义渲染器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM