JTable的表头合并

JTableHeader的单个表头最复杂的操作也就是Renderer渲染和Editor编辑,然后增加事件处理和悬浮框提示,最多再加点特殊显示效果,这和JTable单元格的操作相同,在前面的例子里都已经讲过了,这里就剩下最后一个也是关于JTableHeader表头的操作了表头单元格的合并和拆分.
JTableHeader的单个表头可编辑时可以把它看做一个JTextField,不可操作时可以看做一个JLabel,对于表头的合并和拆分操作来说就是把JLabelJTextField进行合并和拆分的过程.JTable表头的合并简单来说就是把你选定的要合并的表头的边线擦掉,然后调整宽度和高度,再在这几个合并的表头外围画一个新的边线,然后设置JTableHeaderUI,刷新就可以了,JTable的单元格基本相同,唯一的区别就是JTableHeader的表头不像单元格那个容易得到和处理,我们需要定义数据结构来存储它.

 

 

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
import com.swing.lx.table.ColumnGroup;
import com.swing.lx.table.GroupableTableHeader;
import com.swing.lx.table.GroupableTableHeaderUI;
 
public class TableDemo extends JFrame{
 
    String[] header = new String[] {"name", "age", "country", "home", "telephone"};
    String[][] content = new String[][]{{"name1","18","China", "shangHai", "111"}, 
    		{"name1","18","China", "shangHai", "111"}};
     
    public TableDemo() {
        super("test");
        setSize(500, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
         
        DefaultTableModel dm = new DefaultTableModel(content, header);
 
        JTable table = new JTable(dm) {
            @Override
            protected JTableHeader createDefaultTableHeader() {
                 
                return new GroupableTableHeader(columnModel);
//            	return null;
            }
        };
        
        TableColumnModel cm = table.getColumnModel();
        ColumnGroup g_name = new ColumnGroup("Source");
        g_name.add(cm.getColumn(0));
        g_name.add(cm.getColumn(1));
        g_name.add(cm.getColumn(2));
        ColumnGroup g_name2 = new ColumnGroup("Target");
        g_name2.add(cm.getColumn(3));
        g_name2.add(cm.getColumn(4));
                 
        GroupableTableHeader header = (GroupableTableHeader) table.getTableHeader();
        header.addColumnGroup(g_name);
        header.addColumnGroup(g_name2);
        table.getTableHeader().setUI(new GroupableTableHeaderUI());
         
        JScrollPane panel = new JScrollPane(table);
        getContentPane().add(panel, BorderLayout.CENTER);
    }
    public static void main(String[] args) {
        TableDemo demo = new TableDemo();
        demo.setVisible(true);
    }
}
 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值