为JTable加上行头(下)

把上次没有写完的方法补全一下(上一篇[url]http://daimojingdeyu.iteye.com/blog/417915[/url]),先来看一下JScrollPane的结构
[img]http://daimojingdeyu.iteye.com/upload/attachment/121479/17e128da-0377-30f4-8d71-bd9d022785c9.jpg[/img]
只要在JScrollPane的rowheader位置增加一下可以作为表头的组件就可以了,这里我们选择JTable,也就是说这个关键就是用一个table来作为另一个table的行头。
上图的左上角,即JScrollPane的rowheader和columnheader的交界处,为一个corn组件,选用一个JLabel来填充。代码如下:

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;


public class TableWithRowHeader2 {

public static void main(String[] args) {
final JFrame f = new JFrame("有行头的表格2");
String[][] tableData = {
{"90" , "89" , "67" , "88"},
{"80" , "99" , "77" , "58"},
{"80" , "99" , "77" , "58"}
};
String[] columnNames = {"数学", "语文", "英语", "化学"};
String[] rowNames = {"张三", "李四", "王二"};
String tableCorn = "姓名\\课程";

JTable table = new JTable(tableData, columnNames);

JScrollPane scrollPane = new JScrollPane(table);

// 设置表格的行头和行列交界处的边角的显示
scrollPane.setRowHeader(createRowHeader(rowNames));
JLabel corner = new JLabel(tableCorn);
corner.setBackground((Color) UIManager.get("TableHeader.background"));
scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, corner);

f.add(scrollPane);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
SwingUtilities.invokeLater(new Runnable()
{

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

});
}

/**
* 获取到一个使用表格加入到ScrollPane的rowheader,使其作为表的行头
* @param rowNames
* @return
*/
private static JViewport createRowHeader(String[] rowNames) {
String[][] data = new String[rowNames.length][1];
for (int i = 0; i < rowNames.length; i++) {
data[i][0] = rowNames[i];
}
//列头随便取一个,在JViewport里是不能显示的
JTable table = new JTable(data, new String[]{"aa"});
table.setEnabled(false);
table.setBackground((Color) UIManager.get("TableHeader.background"));
JViewport view = new JViewport();
view.setView(table);
view.setPreferredSize(new Dimension(60,54));
return view;
}
}


效果图可以参考[url]http://daimojingdeyu.iteye.com/blog/417915[/url]

思路应该就这2种吧(1、行头和数据混合。2、使用JScrollPane分离显示),其他的暂时没见到过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值