修改Jtable字體顏色

今天寫一篇關於JTable有關的文章,包括:爲JTable單元格設置字體顏色、爲JTable單元格設置背景色、讓JTable某一列設置爲不可能編輯。代碼很簡單,請朋友們參考如下: 


package Java;   


import javax.swing.JFrame;   

import javax.swing.JTable;   

import javax.swing.JPanel;   

import javax.swing.JScrollPane;   

import java.awt.BorderLayout;   

import javax.swing.JComboBox;   

import javax.swing.table.TableColumn;   

import javax.swing.DefaultCellEditor;   


import javax.swing.table.DefaultTableCellRenderer;   

import java.awt.Color;   

import javax.swing.table.DefaultTableModel;   

  

/**  

* 設置單元格爲不可編輯狀態   

*/  

public class JTableFrame_4 extends JFrame {   

 

private JPanel panel;   

private JTable table; //定義個二維數據表格   

private JScrollPane scrollPane; //定義帶有滾動條的面板   

 private DefaultTableModel dtm; //定義表格模型,該模型可以存放數據          

 

//初始化數據   

    Object[][] rowData = {   

        {"1001", "李漢", "軟件部", new Double(3000)},   

        {"1002", "朱澤", "軟件部", new Double(3100)},   

        {"1003", "劉宇", "經理部", new Double(3000)},   

        {"1004", "張斌", "軟件部", new Double(4000)},   

        {"1005", "秦小", "人事部", new Double(4000)}   

    };   

       

    //初始化列名   

    Object[] columnNames = {"編號", "姓名", "部門", "月薪"};   

       

    public JTableFrame_4() {   

        super("單元格具有下拉框的表格");   

        init();   

    }   

       

    public void init() {   

        setSize(500, 300);   

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   

           

        //利用TableModel重新覆蓋isCellEditable方法,將第一列變成不可編輯狀態   

        dtm = new DefaultTableModel(rowData, columnNames) {   

            public boolean isCellEditable(int rowIndex, int columnIndex) {   

                boolean f = (0 <= rowIndex && rowIndex < getRowCount() && columnIndex == 0) ? false : true;   

                return f;   

            }   

        };   

        table = new JTable(dtm);   

        JComboBox comboBox = new JComboBox();   

        comboBox.addItem("軟件部");   

        comboBox.addItem("經理部");   

        comboBox.addItem("人事部");   

        comboBox.addItem("後勤部");   

        comboBox.addItem("財務部");   

           

        //TableColumn主要作用可以對錶格中的某一列的屬性進行編輯   

        TableColumn tableColumn = table.getColumn("部門");   

           

        //利用TableColumn類中的setCellEditor()方法來設置單元格的編輯器   

        //DefaultCellEditor類可以將表格中的單元格設置成下拉框   

        tableColumn.setCellEditor(new DefaultCellEditor(comboBox));   

           

        //DefaultTableCellRenderer類可以繪製單元格的背景、字體顏色等功能   

        DefaultTableCellRenderer backGroundColor = new DefaultTableCellRenderer();   

        //繪製部門列的背景爲黃色   

        backGroundColor.setBackground(Color.yellow);   

        tableColumn.setCellRenderer(backGroundColor);   

           

           

        TableColumn moneyColumn = table.getColumn("月薪");   

        //繪製月薪列的字體顏色   

        DefaultTableCellRenderer fontColor = new DefaultTableCellRenderer() {   

            public void setValue(Object value) { //重寫setValue方法,從而可以動態設置列單元字體顏色   

               

                double a = (value instanceof Double) ? ((Double) value).doubleValue() : 0.0; //獲取月薪列中的值   

                   

                setForeground((a  > 3099.0) ? Color.red : Color.black); //如果月薪大於3099元,就將字體設置爲紅色   

                   

                setText((value == null) ? "" : value.toString());   

            }   

        };   

        moneyColumn.setCellRenderer(fontColor);   

                      

       panel = new JPanel();   

        panel.setLayout(new BorderLayout());   

           

        scrollPane = new JScrollPane();   

        scrollPane.getViewport().setView(table); //把二維數據表格放到滾動面板中   

        panel.add(scrollPane, BorderLayout.CENTER); //把滾動面板添加到底層面板上   

           

        this.getContentPane().add(panel, BorderLayout.CENTER);   

           

        setVisible(true);   

    }   

       

    public static void main(String[] args) {   

        JTableFrame_4 f = new JTableFrame_4();   

    }   

}  







我想根據內容動態的設置單元格的字體顏色,比如“負值”顯示爲“紅色”

//TableCellColor.java


import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;

public class TableCellColor extends JFrame {
  String[] columnNames = {"第1列", "第2列", "第3列"};
  Object[][] data = {
      {
      "(1,1)", "(1,2)", "(1,3)"}
      , {
      "(2,1)", "(2,2)", "(2,3)"}
      , {
      "(3,1)", "(3,2)", "(3,3)"}
      , {
      "(4,1)", "(4,2)", "(4,3)"}
      ,
  };
  int r = 1, c = 0; //      用於控制變色區域
  public TableCellColor() {
    DefaultTableModel dtm = new DefaultTableModel(data, columnNames);
    JTable table = new JTable(dtm);
    table = new JTable(dtm) {

      public Component prepareRenderer(TableCellRenderer renderer, int row,
                                       int column) {
        Component component = super.prepareRenderer(renderer, row, column);

        if (row == r && column == c) {
          component.setBackground(Color.gray);
        }

        return component;
      }
    };

    JScrollPane scroll = new JScrollPane(table);
    this.setContentPane(scroll);
    this.setBounds(100, 50, 300, 150);
  }

  public static void main(String arg[]) {
    TableCellColortes = new TableCellColor();
    tes.setVisible(true);
    tes.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
} 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章