简体   繁体   English

如何设置 JTable 列和行颜色?

[英]How do I set the JTable column and row color?

如何设置JTable列和行颜色?

Here is a short example .这是一个简短的例子

输出

import java.awt.Color;
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

public class JTableExample extends JFrame {

   String[][] data = {{"John", "Sutherland", "Student"},
         {"George", "Davies", "Student"},
         {"Melissa", "Anderson", "Associate"},
         {"Stergios", "Maglaras", "Developer"},
   };

   String[] fields = {"Name", "Surname", "Status"};

   public static void main(String[] args) {
      new JTableExample();
   }

   public JTableExample() {
      super();
      setSize(150, 150);
      addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent we) {
            dispose();
            System.exit(0);
         }
      });
      init();
      pack();
      setVisible(true);
   }

   private void init() {
      final CustomCellRenderer renderer = new CustomCellRenderer();
      JTable jt = new JTable(data, fields) {

         @Override
         public TableCellRenderer getCellRenderer(int row, int column) {
            return renderer;
         }

      };
      JScrollPane pane = new JScrollPane(jt);
      getContentPane().add(pane);
   }


   /**
    * @author suhas, orwellophile
    *
    */
   private class CustomCellRenderer extends DefaultTableCellRenderer {

      /**
       * @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(JTable, Object, boolean, boolean, int, int)
       */
      public Component getTableCellRendererComponent(JTable table, Object value,
                                                     boolean isSelected, boolean hasFocus, int row, int column) {

         Component rendererComp = super.getTableCellRendererComponent(table, value,
               isSelected, hasFocus, row, column);

         // Very important to handle selected items (render them inversely colored)
         if (isSelected) {
            rendererComp.setBackground(getHuedColor(row).darker().darker());
            rendererComp.setForeground(getHuedColor(row).brighter().brighter());
         }
         else {
            rendererComp.setBackground(getHuedColor(row).brighter().brighter());
            rendererComp.setForeground(getHuedColor(row).darker().darker());
         }

         return rendererComp;
      }

      public Color getHuedColor(int hue) {
         return new Color(
               Color.HSBtoRGB(85 / 360f * hue, 0.7f, 1.0f
               ));
      }
   }
}

Answering a vague question from an absent-minded asker takes some good will (and idle time).回答一个心不在焉的提问者一个模糊的问题需要一些善意(和空闲时间)。

For column, you can set a cell renderer that extends DefaultTableCellRenderer (which extends JLabel) on a column, then set renderer's foreground and background.对于列,您可以在列上设置扩展DefaultTableCellRenderer (扩展 JLabel)的单元格渲染器,然后设置渲染器的前景和背景。

For row you have to do it in cell renderer's getTableCellRendererComponent .对于行,您必须在单元格渲染器的getTableCellRendererComponent

If you need anything beyond trivial (eg alternate row background) you should use a flexible custom renderer.如果您需要任何不重要的东西(例如交替行背景),您应该使用灵活的自定义渲染器。 There are countless free and commercial table components that provide coloring and everything JTable should have, for example JIDE Grids (not free but super powerful).有无数免费和商业的表格组件提供着色和 JTable 应有的一切,例如JIDE Grids (不是免费的,但功能非常强大)。

DefaultTableCellRenderer rendar1 = new DefaultTableCellRenderer();
    rendar1.setForeground(Color.red);

    jTable1.getColumnModel().getColumn(0).setCellRenderer(rendar1);

colum change color this code to constructor列将此代码更改为构造函数的颜色

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

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