Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有条件格式(如Excel)的Jtable_Java_Jtable_Conditional Formatting - Fatal编程技术网

Java 具有条件格式(如Excel)的Jtable

Java 具有条件格式(如Excel)的Jtable,java,jtable,conditional-formatting,Java,Jtable,Conditional Formatting,JTable是否像excel一样支持三色条件格式。 例子: 我在谷歌上查了一下,我所能找到的就是一次给符合条件的单元格分配一种颜色。我想知道我是否可以只提供三种颜色,Jtable会根据单元格的值分配颜色的深浅。以下是一种方法,您可以如何做到这一点。我们可以找到其他类 import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.event.WindowAda

JTable是否像excel一样支持三色条件格式。 例子:


我在谷歌上查了一下,我所能找到的就是一次给符合条件的单元格分配一种颜色。我想知道我是否可以只提供三种颜色,Jtable会根据单元格的值分配颜色的深浅。

以下是一种方法,您可以如何做到这一点。我们可以找到其他类

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.AbstractListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import static javax.swing.SwingConstants.CENTER;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;

import general.VerticalTableHeaderCellRenderer;
import java.awt.Color;
import java.util.Random;
import javax.swing.table.TableCellRenderer;

//  The class of template for table's presentation of knowledge
//==============================================================================    
public class ExcelTable extends JFrame {

    public static int rowCount = 1024;
    public static int colCount = 1024;
    public static int CHLength = 100;
    public static int RWLength = 50;
    public static int DCW = 20;

//  The constructor of this class
//==============================================================================    
    public ExcelTable() {
        super("Draw cell rotate");
        setSize(400, 400);

        //The abstract model of table's presentation
        ListModel lm = new AbstractListModel() {
            String[] headers = new String[rowCount];

            @Override
            public int getSize() {
                return headers.length;
            }

            @Override
            public Object getElementAt(int index) {
                return headers[index];

            }
        };

        DefaultTableModel dtm = new DefaultTableModel(lm.getSize(), colCount);
        JTable table = new JTable(dtm) {
            @Override
            public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
                Component comp = super.prepareRenderer(renderer, row, col);
                Object value = getModel().getValueAt(row, col);
                setCellSelectionEnabled(true);

// Here you can write you schemes
                final Random r = new Random();
                Color c = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256), r.nextInt(256));

                if (getSelectedRow() != 0) {
                    if (row % 2 == 0 && col % 2 == 1) {
                        comp.setBackground(c);
                    } else if (row % 2 == 1 && row % 2 == 1) {
                        comp.setBackground(c);
                    } else {
                        comp.setBackground(c);
                    }
                } else {
                    comp.setBackground(Color.white);
                }
                return comp;
            }
        };
        table.getTableHeader().setDefaultRenderer(new VerticalTableHeaderCellRenderer());
        for (int i = 0; i < colCount; i++) {
            table.getColumnModel().getColumn(i).setPreferredWidth(DCW);// .setTotalColumnWidth();
        }
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        table.setCellSelectionEnabled(true);

        // Create header rotation
        JList rowHeader = new JList(lm);
        // if (fieldlength)
        rowHeader.setFixedCellWidth(RWLength); //RowHeaser width
        rowHeader.setFixedCellHeight(table.getRowHeight());

        //Set render
        rowHeader.setCellRenderer(new RowRenderer(table));

        //JScrollPane
        JScrollPane pane = new JScrollPane(table);
        pane.setColumnHeader(new JViewport() {
            @Override
            public Dimension getPreferredSize() {
                Dimension d = super.getPreferredSize();
                d.height = CHLength;  // Col header Height
                return d;
            }
        });
        pane.setRowHeaderView(rowHeader);
        getContentPane().add(pane, BorderLayout.CENTER);

    }

//=========================================
    public static void main(String[] args) {
        ExcelTable jr = new ExcelTable();
        jr.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        jr.setVisible(true);
    }
}

class RowRenderer extends JLabel implements ListCellRenderer {

    public RowRenderer(JTable table) {
        JTableHeader header = table.getTableHeader();
        setOpaque(true);
        setBorder(UIManager.getBorder("TableHeader.cellBorder"));
        setHorizontalAlignment(CENTER);
        setForeground(header.getForeground());
        setBackground(header.getBackground());
        setFont(header.getFont());
    }

    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        setText((value == null) ? "" : value.toString());
        return this;
    }
}

这里有一种方法,你可以这样做。我们可以找到其他类

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.AbstractListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import static javax.swing.SwingConstants.CENTER;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;

import general.VerticalTableHeaderCellRenderer;
import java.awt.Color;
import java.util.Random;
import javax.swing.table.TableCellRenderer;

//  The class of template for table's presentation of knowledge
//==============================================================================    
public class ExcelTable extends JFrame {

    public static int rowCount = 1024;
    public static int colCount = 1024;
    public static int CHLength = 100;
    public static int RWLength = 50;
    public static int DCW = 20;

//  The constructor of this class
//==============================================================================    
    public ExcelTable() {
        super("Draw cell rotate");
        setSize(400, 400);

        //The abstract model of table's presentation
        ListModel lm = new AbstractListModel() {
            String[] headers = new String[rowCount];

            @Override
            public int getSize() {
                return headers.length;
            }

            @Override
            public Object getElementAt(int index) {
                return headers[index];

            }
        };

        DefaultTableModel dtm = new DefaultTableModel(lm.getSize(), colCount);
        JTable table = new JTable(dtm) {
            @Override
            public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
                Component comp = super.prepareRenderer(renderer, row, col);
                Object value = getModel().getValueAt(row, col);
                setCellSelectionEnabled(true);

// Here you can write you schemes
                final Random r = new Random();
                Color c = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256), r.nextInt(256));

                if (getSelectedRow() != 0) {
                    if (row % 2 == 0 && col % 2 == 1) {
                        comp.setBackground(c);
                    } else if (row % 2 == 1 && row % 2 == 1) {
                        comp.setBackground(c);
                    } else {
                        comp.setBackground(c);
                    }
                } else {
                    comp.setBackground(Color.white);
                }
                return comp;
            }
        };
        table.getTableHeader().setDefaultRenderer(new VerticalTableHeaderCellRenderer());
        for (int i = 0; i < colCount; i++) {
            table.getColumnModel().getColumn(i).setPreferredWidth(DCW);// .setTotalColumnWidth();
        }
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        table.setCellSelectionEnabled(true);

        // Create header rotation
        JList rowHeader = new JList(lm);
        // if (fieldlength)
        rowHeader.setFixedCellWidth(RWLength); //RowHeaser width
        rowHeader.setFixedCellHeight(table.getRowHeight());

        //Set render
        rowHeader.setCellRenderer(new RowRenderer(table));

        //JScrollPane
        JScrollPane pane = new JScrollPane(table);
        pane.setColumnHeader(new JViewport() {
            @Override
            public Dimension getPreferredSize() {
                Dimension d = super.getPreferredSize();
                d.height = CHLength;  // Col header Height
                return d;
            }
        });
        pane.setRowHeaderView(rowHeader);
        getContentPane().add(pane, BorderLayout.CENTER);

    }

//=========================================
    public static void main(String[] args) {
        ExcelTable jr = new ExcelTable();
        jr.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        jr.setVisible(true);
    }
}

class RowRenderer extends JLabel implements ListCellRenderer {

    public RowRenderer(JTable table) {
        JTableHeader header = table.getTableHeader();
        setOpaque(true);
        setBorder(UIManager.getBorder("TableHeader.cellBorder"));
        setHorizontalAlignment(CENTER);
        setForeground(header.getForeground());
        setBackground(header.getBackground());
        setFont(header.getFont());
    }

    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        setText((value == null) ? "" : value.toString());
        return this;
    }
}

它不是只设置了两种颜色吗,红色和绿色。我正在寻找设置色调的颜色。就像我的示例一样,颜色阴影应该根据值而改变。另外,我在哪里可以找到“VerticalTableHeaderCellRenderer”类?再次,我看到您正在为三种不同的条件指定三种颜色。我正在尝试制作一个热图,在热图中会有颜色的渐变。我怎么做呢?也可以考虑重写<代码> PrimeReNeRever()/<代码>;这显示了制作渐变渲染器的一种方法;请更新您的问题以澄清您的用例。以下是所有其他需要的类:。关于颜色梯度:它必须是颜色分布的数学算法,例如在矩阵表示中。稍后从矩阵中,您可以加载该配色方案。它不是只设置了两种颜色吗,红色和绿色。我正在寻找设置色调的颜色。就像我的示例一样,颜色阴影应该根据值而改变。另外,我在哪里可以找到“VerticalTableHeaderCellRenderer”类?再次,我看到您正在为三种不同的条件指定三种颜色。我正在尝试制作一个热图,在热图中会有颜色的渐变。我怎么做呢?也可以考虑重写<代码> PrimeReNeRever()/<代码>;这显示了制作渐变渲染器的一种方法;请更新您的问题以澄清您的用例。以下是所有其他需要的类:。关于颜色梯度:它必须是颜色分布的数学算法,例如在矩阵表示中。稍后,可以从矩阵中加载该配色方案。