简体   繁体   English

在摆动应用程序中更改列的颜色

[英]Change color of column in swing application

The program is about patient and their vital signs. 该计划是关于患者及其生命体征的。 In case the patient has abnormal vital signs(outside the range specified) i need to highlight that column in red. 如果患者的生命体征异常(超出指定范围),我需要用红色突出显示该列。 I have written an isNormal function mentioned below. 我写了isNormal函数。 But I am unsure how to highlight the column in red using this function. 但是我不确定如何使用此功能以红色突出显示该列。 Can somebody please suggest a way to do this? 有人可以建议一种方法吗?

private void refresh()
{
    int rowCount = vitalSignTable.getRowCount();
    int i;
    for (i= rowCount-1; i>=0; i--)
    {
        ((DefaultTableModel)vitalSignTable.getModel()).removeRow(i);
    }

    for(vitalSigns vs :vitalSign)
    {
        Object[] vital_row = new Object[6];
        vital_row [0] = vs.getRespRate();

        vital_row [1] = vs.getHeartRate();
        vital_row [2] =vs.getBloodPressure();
        vital_row [3] = vs.getWeightPound();
        vital_row[4] = vs.getWeightKilos();
        vital_row[5]= vs.getTimeStamp();

        ((DefaultTableModel)vitalSignTable.getModel()).addRow(vital_row);
    }
}

private String isNormal( vitalSigns vitalSign) {
    String isNormal = "Normal";

    int respirationRate = vitalSign.getRespRate();
    int heartRate = vitalSign.getHeartRate();
    double bloodPressure = vitalSign.getBloodPressure();
    int weightPound = vitalSign.getWeightPound();
    int weightKilos = vitalSign.getWeightKilos();
    {
        if ((respirationRate < 20 || respirationRate > 30) /*Respiration Rate*/
                || (heartRate < 80 || heartRate > 130) /*Heart Rate*/
                || (bloodPressure < 80 || bloodPressure > 110) /*Blood Pressure*/
                || (weightPound <80 || weightPound > 160)
                || (weightKilos <40 || weightKilos > 80))
                 {
            isNormal = "Abnormal";
        }
    }
    return isNormal;
}

Here is a little example, how to color cells in a table. 这是一个小例子,如何为表格中的单元格上色。 To do it, you need to implement your own TableCellRenderer and set it for a column. 为此,您需要实现自己的TableCellRenderer并将其设置为列。 For more information see the article about JTable . 有关更多信息,请参见有关JTable的文章。

import java.awt.Color;
import java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

/**
 * <code>TableRendererTest</code>.
 */
public class TableColumnsTest implements Runnable {

    @Override
    public void run() {
        JFrame frm = new JFrame("Renderer test");
        DefaultTableModel model = new DefaultTableModel(20, 20);
        for (int i = 0; i < 20; i++) {
            model.setValueAt("Test " + i, i, 3);
        }
        JTable table = new JTable(model);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        JScrollPane scroller = new JScrollPane(table);
        frm.add(scroller);
        // set renderer for the column 3
        table.getColumnModel().getColumn(3).setCellRenderer(
                new ColoredRenderer(new DefaultTableCellRenderer(), Color.RED, Color.WHITE));
        frm.pack();
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new TableColumnsTest());
    }

    private static class ColoredRenderer implements TableCellRenderer {

        private final TableCellRenderer delegate;

        private final Color differentBackground;

        private final Color differentForeground;

        public ColoredRenderer(TableCellRenderer delegate, Color differentBackground, Color differentForeground) {
            this.delegate = delegate;
            this.differentBackground = differentBackground;
            this.differentForeground = differentForeground;
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, 
                Object value, boolean isSelected, boolean hasFocus, int row,
                int column) {
            Component result = delegate.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            // probably check for null values and whether the cell is selected (isSelected).
            result.setBackground(differentBackground);
            result.setForeground(differentForeground);
            return result;
        }

    }
}

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

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