简体   繁体   English

将彩色行添加到JTable

[英]Adding coloured row to JTable

I have a form to fill and 3 chekbox(yellow-orange-red), when i fill the form and select a colour I click a button which will add a row whit selected colour to the Jtable . 我有一个要填写的表格和3个chekbox(黄色-橙色-红色),当我填写表格并选择一种颜色时,我单击一个按钮,它将向Jtable添加一行白色的选定颜色。 I used a TableCellRenderer It works but when I do the operation three or four times I have all th rows coloured whith the selected checkbox. 我使用了TableCellRenderer,它可以工作,但是当我进行三到四次操作时,所有行都被选中了复选框。 How to make for every row his colour? 如何使每一行都变成他的颜色? Ther's my code: 这是我的代码:

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();

And there's my cell renderer code 还有我的单元格渲染器代码

  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;
        }
    };
}

How to make for every row his colour? 如何使每一行都变成他的颜色?

The question is not clear to me: 我不清楚这个问题:

  1. Are you trying to make every row the same color? 您是否要使每一行都具有相同的颜色? If yes, then you need to invoke table.repaint() whenever you select a new color. 如果是,那么每次选择新颜色时都需要调用table.repaint()。 The all the rows will be re-renderer with the new color 所有行将使用新颜色重新渲染

  2. Or, are you trying to make every row a different Color depending on the color that was selected at the time the row was added? 或者,您是否要根据添加行时选择的颜色,使每一行都具有不同的颜色? If yes, then you need to add another column to the TableModel to store the selected Color for the row. 如果是,那么您需要向TableModel添加另一列以存储该行的选定颜色。 Then in your renderer you need to get the Color from the TableModel. 然后,在渲染器中,您需要从TableModel中获取Color。

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

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