• 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个参数为离最顶端的距离,如果是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);  
      
        }  
      
    } 
    

      下面是效果图,很简单但是可以变换一下就达到别的效果了

  • 相关阅读:
    Android开发之深入理解NFC(一)
    NetBeans找不到C/C++编译器
    【图解HTTP】第二章 简单的http协议
    长时间停留在calculating requirements and dependencies
    【图解HTTP】第一章 了解web及网络基础
    自定义DropDownMenu菜单
    【Android开发精要笔记】Android的Intent机制
    【操作系统】进程管理
    【Head First Java 读书笔记】(七)继承
    网易电面题总结
  • 原文地址:https://www.cnblogs.com/wwssgg/p/16041475.html
Copyright © 2020-2023  润新知