当前位置: 首页 > 知识库问答 >
问题:

如何更改具有特定列值的JTable整行的颜色

巢烨
2023-03-14

我有一个Jtable,它由一个值数组填充。我的代码如下:

  private static final String[] columnNames = {"Line Number", "Error","Fix Proposed","Percentage (%)"};
  static DefaultTableModel model = new DefaultTableModel(null,columnNames);

  public static void DisplayMyJList(List<CaptureErrors> x,String extension,
        ArrayList<Integer> l,ArrayList<Integer> p,
        ArrayList<String> e,ArrayList<String> s) throws IOException {//Method to Dynamic get values to be populated in Jtable.

    String theExtension = extension;
    if(FILE_EXTENSION.equals("java")) {
        for(CaptureErrors ex: x) {

            Vector row = new Vector();
            row.add(ex.getLinenumber());
            row.add(ex.getMyfounderror());
            row.add(ex.getMycorrection());
            row.add(ex.getMyPercentage()+"%");

            model.addRow( row );

            //model.setRowColour(1, Color.YELLOW);
        }
    }

table = new JTable(model);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);    
    table.setFillsViewportHeight(true);
    table.setShowGrid(true);
    table.setShowVerticalLines(true);
    table.setGridColor(new Color(0,128,0));
    JTableHeader header = table.getTableHeader();
    table.setBackground(new Color(255,228,225));
    table.setEnabled(true);
    header.setFont(new Font("Dialog", Font.CENTER_BASELINE, 12));
    header.setBackground(Color.black);
    header.setForeground(Color.yellow);
    JScrollPane pane4 = new JScrollPane(table); 

我可以使用JButton从值数组填充Jtable。我想有一个条件,如果列为“百分比”,则获取该列中的所有值

我不想使用TableCellRenderComponent。我希望在单击Jbutton时执行此操作。

然后根据我想要得到的,前两行应该以红色突出显示。谢谢你的帮助。

共有3个答案

南宫天逸
2023-03-14

可以创建自定义单元渲染器。在其实现中,检查百分比值是否为

例如:

class SomeRenderer extends DefaultTableCellRenderer {
    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);

        if (isHighlightingEnabled){
            Integer percentage = (Integer) table.getValueAt(row, 3);
            if (percentage > 30)
                c.setBackground(Color.RED);
        }
        return c;
    }
}

如果需要,您可以在操作时启用/禁用此呈现逻辑。

有关详细信息,请参见使用自定义渲染器。

广绪
2023-03-14

渲染API的问题之一是很难提供复合渲染器。有很多方法可以做到,别误会我的意思,但如果能把它内置进去就好了。。。[结束咆哮]。。。

基本思想是,您希望设置一系列渲染器,这些渲染器从基本渲染器扩展而来,基本渲染器包含确定在所需条件下应执行的操作所需的逻辑。

public class FilterRenderer extends DefaultTableCellRenderer {
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
        Double percent = (Double) table.getValueAt(row, 3);
        // You'll need some way to supply the filter value, may via a centralised 
        // manager of some kind.
        if (percent > 0.3 && !isSelected) {
            setOpaque(true);
            setBackground(Color.RED);
        } else {
            setOpaque(false);
        }
        return this;
    }
}

public class OtherCellRenderer extends FilterRenderer {
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
        // Apply any special renderer requirements, like translating an object value to String
        return this;
    }
}

您需要为每个列(例如,4)自定义渲染器,并将其应用于表列

TableColumnModel model = table.getColumnModel();
model.getColumn(0).setCellRenderer(new LineNumberRenderer());
model.getColumn(1).setCellRenderer(new ErrorRenederer());
model.getColumn(2).setCellRenderer(new FixProposedRenderer());
model.getColumn(3).setCellRenderer(new Percentage());

或者您可以使用SwingLabsJXTable,它内置了对行高亮显示的支持

阎扬
2023-03-14

有关不创建自定义渲染器的解决方案,请参见表行渲染中的方法

您可能还希望签出表格式渲染器,以便轻松设置百分比列的格式。

 类似资料:
  • 所以我要做的是,根据最后一列内的值更改每行的颜色。 我已经找到了这个解决方案:改变JTable的背景色,效果非常好。 但除此之外,当第四列达到与第二列相同的值时,我想将行的颜色切换为绿色。 我用Cristian Marian的方法写了自己的课 仍然只有每列中的最后一个单元格变为绿色,而不是整个单元格。但是当我在这一行打卡时,整行都会切换颜色 最后一列中的值将由另一帧更改。 当最后一列中的值达到与第

  • 我试图弄清楚如何更改JTable中一行中单词的颜色。 例如,这是我的句子,在一行中; dmpsrv日志“2013年3月12日星期二15:33:03”(格林尼治标准时间)(DB=SS@2)pid=662node=“B2-W4”执行时间=1(s) 每一行的结构都是相同的,我想用粗体显示用户名。 但是我不知道我该怎么做?有人给点诡计吗? 谢谢

  • 您好,我是java jtable的新手。我正在寻找一种在我的程序中有效的方法,但我没有找到它的任何运气。这是我的Jtable 数据来自ms Access数据库,但我想改变状态列中值为“非活动”的行的背景/前景。我在网上找到了很多例子,但所有的例子在我的程序中都是不可能的。有人能帮帮我吗?这是我的模特 这是创建我的表的方法,以及我如何从数据库中获取数据 我该如何添加以这种方式重新绘制的表格?有人能举

  • 有没有办法更改中3个带圆圈的表格标题的背景色? 我还想将所有3个带圆圈的列的字体颜色更改为红色。 下面是我桌子的图像。谢谢

  • 在开始之前,我查看了一些解决方案和文档。我似乎不明白为什么我的代码没有按我认为应该的方式工作。我已经扩展了DefaultTableCellRenderer,但我不相信它正在被应用——否则我就把事情搞砸了。 以下是我在发布此问题之前查看过的帖子/网站: Swing-是否可以在JTable单元格中设置特定文本的字体颜色? JTable细胞渲染器 http://docs.oracle.com/javas

  • 你好,我有一个问题,我需要在红色的一些行的jtabl得到刷新每10秒。另外,要更改颜色的行集。我更新要更改为读取的行集,然后只要找到这些行,我就需要更改表中的行。我试过表格的单元格渲染器,但不能。如果任何人可以提出一些东西,我是开放的一切,希望得到一些代码作为例子。任何这样做的方式都是受欢迎的。我试着用这个函数玩W,但我不能添加要更改的行集…'''