今天寫一篇關於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);
}
}
修改Jtable字體顏色
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.