Java Swing:如何基于文本更改JTable对话框中非常单元格的颜色?

问题描述 投票:0回答:2

我有一个基本的JTable,其中填充了“项目编号”和对应的“颜色”,并且我需要将包含该颜色名称的单元格的颜色更改为该实际颜色,而不管它是否是是否选择。

这是我的JTable的代码:

    String[] title = {"Item Number", "Color"};
    String[][] listOfValues = {{"1", "red"}, {"2", "blue"}, {"3", "green"}};

    JTable new_table = new JTable(listOfValues, title);
    JScrollPane table_pane = new JScrollPane(new_table);
    table_pane.setBounds(10, 10, 300, 230);
    frame.getContentPane().add(table_pane);

布局是临时的。该表如下所示:

enter image description here

因此,在此表中,包含“红色”的单元格将为红色,包含“蓝色”的单元格将为蓝色,而包含“绿色”的单元格将为绿色。所有其他单元格仍保持白色。

我将如何实现?

java swing jtable
2个回答
0
投票

此代码允许更改行的颜色

    /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.examen.navegacion;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

/**
 *
 * @author wilso
 */
public class Fiea {

    public static void main(String[] args) {
        JFrame frame = new JFrame("FrameDemo");
        String[] title = {"Item Number", "Color"};
        String[][] listOfValues = {{"1", "red"}, {"2", "blue"}, {"3", "green"}};

        JTable new_table = new JTable(listOfValues, title);
        JScrollPane table_pane = new JScrollPane(new_table);
        table_pane.setBounds(10, 10, 300, 230);
        frame.getContentPane().add(table_pane);

        new_table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

                c.setBackground(getColor(value.toString()));
                return c;
            }
        });
        frame.pack();
        frame.setVisible(true);
    }

    private static Color getColor(String color) {
        switch (color) {
            case "red":
                return Color.RED;
            default:
                return Color.white;
        }

    }

}

结果是下一个

enter image description here


0
投票

您可以实现自己的TableCellRenderer,并根据情况查找所有文本单元格,或查找第二列(您可以在CellRenderer实现中使用很多不同的创意方法来定位要在其中呈现的目标单元格。具体方式。)

此外,另一种选择是利用JLabel的html功能,然后在构建数据时执行。在简单的情况下,这也可以很好地工作,这意味着您不必实现自己的渲染器,而不是像您这样的情况。您可以使用JLabel的<html>功能。

String colorString = "red";
String jLabelString = "<html><font color=" + colorString + ">" + colorString";

像这样的事情...

String[][] listOfValues = {{"1",jLabelString}, {"2","<html><font color=blue>blue"},etc,etc};
    
© www.soinside.com 2019 - 2024. All rights reserved.