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这是表头ui的代码,继承了BasicTableHeaderUI类,主要修改的,就是中间paint中每个单元格布局的逻辑,其他的可以直接引用即可。paintComponent的参数,前3个不用变,第4个是该所在的列数,调用下面的方法,可以直接获得所在的起始坐标,第5个参数为离最顶端的距离,如果是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); } }下面是效果图,很简单但是可以变换一下就达到别的效果了