?? testtablecellrenderer.java
字號:
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.io.*;
/**
* Description:
* <br/>Copyright (C), 2005-2008, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee kongyeeku@163.com
* @version 1.0
*/
public class TestTableCellRenderer
{
JFrame jf = new JFrame("使用單元格繪制器");
JTable table;
//定義二維數組作為表格數據
Object[][] tableData =
{
new Object[]{"李清照" , 29 , "女" , new ImageIcon("icon/3.gif") , true},
new Object[]{"蘇格拉底", 56 , "男" , new ImageIcon("icon/1.gif") , false},
new Object[]{"李白", 35 , "男" , new ImageIcon("icon/4.gif") , true},
new Object[]{"弄玉", 18 , "女" , new ImageIcon("icon/2.gif") , true},
new Object[]{"虎頭" , 2 , "男" , new ImageIcon("icon/5.gif") , true}
};
//定義一維數據作為列標題
String[] columnTitle = {"姓名" , "年齡" , "性別" , "主頭像" , "是否中國人"};
public void init()
{
//以二維數組和一維數組來創建一個ExtendedTableModel對象
ExtendedTableModel model = new ExtendedTableModel(columnTitle , tableData);
//以ExtendedTableModel來創建JTable
table = new JTable( model);
table.setRowSelectionAllowed(false);
table.setRowHeight(40);
//獲取第三列
TableColumn lastColumn = table.getColumnModel().getColumn(2);
//對第三列采用自定義的單元格繪制器
lastColumn.setCellRenderer(new GenderTableCellRenderer());
//將JTable對象放在JScrollPane中,并將該JScrollPane放在窗口中顯示出來
jf.add(new JScrollPane(table));
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public static void main(String[] args)
{
new TestTableCellRenderer().init();
}
}
class ExtendedTableModel extends DefaultTableModel
{
//重新提供一個構造器,該構造器的實現委托給DefaultTableModel父類
public ExtendedTableModel(String[] columnNames , Object[][] cells)
{
super(cells , columnNames);
}
//重寫getColumnClass方法,根據每列的第一個值來返回其真實的數據類型
public Class getColumnClass(int c)
{
return getValueAt(0 , c).getClass();
}
}
class GenderTableCellRenderer extends JPanel implements TableCellRenderer
{
private String cellValue;
//定義圖標的寬度和高度
final int ICON_WIDTH = 23;
final int ICON_HEIGHT = 21;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
cellValue = (String)value;
//設置選中狀態下繪制邊框
if (hasFocus)
{
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
}
else
{
setBorder(null);
}
return this;
}
//重寫paint方法,負責繪制該單元格內容
public void paint(Graphics g)
{
//如果表格值為"男"或"male",則繪制一個男性圖標
if (cellValue.equalsIgnoreCase("男")
|| cellValue.equalsIgnoreCase("male"))
{
drawImage(g , new ImageIcon("icon/male.gif").getImage());
}
//如果表格值為"女"或"female",則繪制一個女性圖標
if (cellValue.equalsIgnoreCase("女")
|| cellValue.equalsIgnoreCase("female"))
{
drawImage(g , new ImageIcon("icon/female.gif").getImage());
}
}
//繪制圖標的方法
private void drawImage(Graphics g , Image image)
{
g.drawImage(image, (getWidth() - ICON_WIDTH ) / 2
, (getHeight() - ICON_HEIGHT) / 2 , null);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -