为JTable加上行头

本文主要介绍一下如何给表格增加行头的问题。默认的JTable已经支持为表格设置列头啦,但是对于行头却没有提供对应的接口。要实现给表格增加行头可以从下面两种方式来考虑。

方法1:将表格的第一列作为行头,然后对其进行伪装处理,使其看起来和其他列不一样,表现起来像是一个行头。使用这种方式需要将行头的数据也作为表格里的普通数据来处理,可能会造成表头和数据划分不清晰,但是有时候这也是一种快捷的解决问题的方法。可以参考下面的示例代码
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.table.TableCellRenderer;


public class TableWithRowHeader {

	public static void main(String[] args) {
		final JFrame f = new JFrame("有行头的表格");
		String[][] tableData = {
				{"张三", "90" , "89" , "67" , "88"},
				{"李四", "80" , "99" , "77" , "58"},
				{"王二", "80" , "99" , "77" , "58"}
		};
		String[] columnNames = {"姓名\\课程", "数学", "语文", "英语", "化学"};
		
		JTable table = new JTable(tableData, columnNames);
		// 将表格的第一列作为表头,使用渲染器改变其外观,看起来像表头
		table.getColumnModel().getColumn(0).setCellRenderer(new RowHeaderRenderer());
		
		f.add(new JScrollPane(table));
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.pack();
		SwingUtilities.invokeLater(new Runnable()
		{

			@Override
			public void run() {
				f.setVisible(true);
			}
			
		});
	}
}

class RowHeaderRenderer implements TableCellRenderer
{
	private JLabel label = new JLabel();
	// 获取表头的字体、前景色和背景色,用来将Label伪装成表头的样子
	private static Font font = (Font) UIManager.get("TableHeader.font");
	private static Color fgc = (Color) UIManager.get("TableHeader.foreground");
	private static Color bgc = (Color) UIManager.get("TableHeader.background");
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		// TODO Auto-generated method stub
		label.setFont(font);
		label.setHorizontalAlignment(SwingConstants.CENTER);
		label.setText(value.toString());
		label.setOpaque(true);
		label.setForeground(fgc);
		label.setBackground(bgc);
		return label;
	}
	
}


效果图如下:
为JTable加上行头

方法2:真正为表格增加一下行头,行头里的数据将不再作为JTable的数据部分存在,而是在此JTable的外面,这里需要将JScrollPane的组件图搞出来,今天有点晚了,明天再补吧...

已经补充: http://daimojingdeyu.iteye.com/blog/419309

你可能感兴趣的:(swing,F#,Blog)