Swing 表头设置之UI

看了网上好多资料,和一个热心网友胡海波发到网上共享的代码,有所启发,下面是我对其代码进行的修改,以及个人心得。
表格头部设置有好几种,这种是把表头设置成ui,再设置进表格中

package tableHead;

import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicTableHeaderUI;
import javax.swing.table.JTableHeader;

public class TableHeadUI extends BasicTableHeaderUI {
private JTableHeader header;

public void paint(Graphics g, JComponent c) {
header = (JTableHeader) c;

JLabel label=getLabel("个人信息");
rendererPane.paintComponent(g, label, header, getX(0), 0, getWidth(0)+getWidth(1), 20, true);

label=getLabel("名称");
rendererPane.paintComponent(g, label, header, getX(0), 20, getWidth(0), 20, true);

label=getLabel("年龄");
rendererPane.paintComponent(g, label, header, getX(1), 20, getWidth(1), 20, true);

label=getLabel("工资");
rendererPane.paintComponent(g, label, header, getX(2), 0, getWidth(2), 40, true);

label=getLabel("编号");
rendererPane.paintComponent(g, label, header, getX(3), 0, getWidth(3), 40, true);
}

// 得到指定列的起始坐标

private int getX(int column){

int x=0;

for(int i=0;i<column;i++)

x+=header.getColumnModel().getColumn(i).getWidth();

return x;

}

//得到指定列的宽度

private int getWidth(int column){

return header.getColumnModel().getColumn(column).getWidth();

}

//得到具有指定文本的标签

private JLabel getLabel(String text){

JLabel label = new JLabel(text, JLabel.CENTER);

label.setBorder(UIManager.getBorder("TableHeader.cellBorder"));

return label;

}
}


这是表头ui的代码,继承了BasicTableHeaderUI类,主要修改的,就是中间paint中每个单元格布局的逻辑,其他的可以直接引用即可。paintComponent的参数,前3个不用变,第4个是该所在的列数,调用下面的方法,可以直接获得所在的起始坐标,第5个参数为[color=red]离最顶端的距离[/color],如果是0,那么就是第一列,因为第一行与顶端距离为0,以此类推,第2行这个值就是第1行的行高。第6个参数为该单元的宽,第7个参数为该单元格的高,最后一个写true即可。

下面代码是实例出来,加入表格的展示


package tableHead;

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Table {


public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(new Dimension(600,400));
JScrollPane jsp = new JScrollPane();
jf.setContentPane(jsp);
Object[][] t = {{"","","",""},{"","","",""}};
String[]h = {"","","",""};
//建表
JTable jt = new JTable(new DefaultTableModel(t,h));
//建头组件
TableHeadUI ui = new TableHeadUI();
//获得头组件并设置
jt.getTableHeader().setUI(ui);
//设置表头的大小,要够长,高度最好要和表头的高度一样,否则会出现多余部分
jt.getTableHeader().setPreferredSize(new Dimension(400,40));
jsp.setViewportView(jt);
jf.setVisible(true);

}

}



下面是效果图,很简单但是可以变换一下就达到别的效果了
[img]http://dl.iteye.com/upload/picture/pic/129147/01bf4b3a-3d9c-332f-9262-cc959bd40c02.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值