【问题标题】:Adding coloured row to JTable将彩色行添加到 JTable
【发布时间】:2013-12-10 10:48:45
【问题描述】:

我有一个要填写的表格和 3 个复选框(黄色-橙色-红色),当我填写表格并选择一种颜色时,我单击一个按钮,该按钮将向 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;
        }
    };
}

【问题讨论】:

  • 为什么 if (yellow.isSelected()==true) 只需 if (yellow.isSelected()) 会起作用
  • 好吧,这不是真正的问题
  • 是的,这可能不是问题,只是一个建议
  • 好吧,先生摇摆好建议

标签: java swing colors jtable tablecellrenderer


【解决方案1】:

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

这个问题我不清楚:

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

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

【讨论】:

  • 是的,当我单击提交按钮时,它将添加一个新行,其中包含我表单中的值,并且该行的颜色取决于所选颜色。抱歉,我不明白你的建议,因为我是 swing java 的新手
  • @user2928578,我建议行的颜色需要基于 TableModel 中的数据。有关此方法的示例,请参阅 Table Row Rendering。在您的情况下,您将希望 TableModel 中的数据存储颜色,但您不希望在表中显示列。因此,您需要从表中删除 TableColumn。请参阅 JTable 的 getColumn()removeColumn() 方法来帮助您做到这一点。
  • @user2928578 这是完整的工作代码,您可以下载并编译和执行。没有比这更简单的了。我不知道你对这个例子有什么不明白的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 2012-06-30
  • 2013-12-17
  • 2012-02-26
  • 1970-01-01
相关资源
最近更新 更多