繁体   English   中英

将彩色行添加到JTable

[英]Adding coloured row to JTable

我有一个要填写的表格和3个chekbox(黄色-橙色-红色),当我填写表格并选择一种颜色时,我单击一个按钮,它将向Jtable添加一行白色的选定颜色。 我使用了TableCellRenderer,它可以工作,但是当我进行三到四次操作时,所有行都被选中了复选框。 如何使每一行都变成他的颜色? 这是我的代码:

JTable  table = new JTable(
            new DefaultTableModel(new Object[][] {}, columnNames));

    TableColumn column1 = table.getColumnModel().getColumn(
            0);
    column1.setCellRenderer(getRenderer());
    TableColumn column3 = table.getColumnModel().getColumn(
            1);
    column3.setCellRenderer(getRenderer());
    TableColumn column2 = table.getColumnModel().getColumn(
            2);
    column2.setCellRenderer(getRenderer());
 String desc = display.getSelectedItem().toString();
 DefaultTableModel tm = (DefaultTableModel) table.getModel();

                    String numcam = num_cam;
                    String timeStamp = new SimpleDateFormat(
                            "yyyy-MM-dd--HH:mm:ss").format(Calendar
                            .getInstance().getTime());

                    tm.addRow(new Object[] { new String(timeStamp), new String(numcam),
                            new String(desc) });

                    table.setModel(tm);

                    // reinitialiser les boutons apres le click
                    buttonGroup.clearSelection();
                    buttonGroup2.clearSelection();

还有我的单元格渲染器代码

  private static TableCellRenderer getRenderer() {
    return new DefaultTableCellRenderer() {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        @Override
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus,
                int row, int column) {
            Component tableCellRendererComponent = super
                    .getTableCellRendererComponent(table, value,
                            isSelected, hasFocus, row, column);
            tableCellRendererComponent.setBackground(Color.black);
            setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
            // verification de l couleur du bouton clické
            if (yellow.isSelected()) {
                tableCellRendererComponent.setForeground(new Color(255,
                        255, 51));
            } else if (orange.isSelected()) {
                tableCellRendererComponent.setForeground(new Color(255,
                        153, 0));
            } else if (red.isSelected()) {
                tableCellRendererComponent.setForeground(Color.RED);
            }

            return tableCellRendererComponent;
        }
    };
}

如何使每一行都变成他的颜色?

我不清楚这个问题:

  1. 您是否要使每一行都具有相同的颜色? 如果是,那么每次选择新颜色时都需要调用table.repaint()。 所有行将使用新颜色重新渲染

  2. 或者,您是否要根据添加行时选择的颜色,使每一行都具有不同的颜色? 如果是,那么您需要向TableModel添加另一列以存储该行的选定颜色。 然后,在渲染器中,您需要从TableModel中获取Color。

暂无
暂无

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

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