java JTable设置多行表头

import javax.swing.*;
import javax.swing.plaf.basic.BasicTableHeaderUI;
import javax.swing.table.JTableHeader;
import java.awt.*;/************************************************************
 * 
 *  * @author 邓洪书
 *  */
public class StoreTable extends JTable {
public StoreTable() { 
super(0, 13);  
this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
this.getTableHeader().setUI(new UI()); 

// 表头绘制器*********************************************************************
private class UI extends BasicTableHeaderUI { 
private JTableHeader header; 
public void paint(Graphics g, JComponent c) {
header = (JTableHeader) c;  
getTableHeader().setPreferredSize(new Dimension(StoreTable.this.getWidth(), 45));// 设置表头大小。横坐标必须足够大,  
//否则会出现绘制不完全以及闪烁现象    
//分类  
JLabel label=getLabel("分类"); 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现JTable多行表头,可以使用JTableHeader的setPreferredSize()方法来设置表头的高度,并使用TableColumnModel的getColumn()方法来获取表头中每列的组件。 以下是一个示例代码: ``` import javax.swing.*; import javax.swing.table.*; import java.awt.*; public class MultiRowHeaderTable extends JFrame { public MultiRowHeaderTable() { super("Multi-Row Headers in JTable"); DefaultTableModel model = new DefaultTableModel(5, 5); JTable table = new JTable(model); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // Create a multi-row header JTableHeader header = table.getTableHeader(); header.setPreferredSize(new Dimension(100, 50)); JPanel panel = new JPanel(new BorderLayout()); panel.add(header, BorderLayout.NORTH); panel.add(table, BorderLayout.CENTER); // Set the cell renderer for each column of the header TableColumnModel columnModel = table.getColumnModel(); for (int i = 0; i < columnModel.getColumnCount(); i++) { TableColumn column = columnModel.getColumn(i); column.setHeaderRenderer(new MultiRowHeaderRenderer()); } getContentPane().add(panel); pack(); setVisible(true); } public static void main(String[] args) { new MultiRowHeaderTable(); } } class MultiRowHeaderRenderer extends JLabel implements TableCellRenderer { public MultiRowHeaderRenderer() { setOpaque(true); setHorizontalAlignment(CENTER); setVerticalAlignment(TOP); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText(value.toString()); return this; } } ``` 在这个示例中,我们创建了一个多行表头,其中每列的组件都是JLabel。我们使用TableColumnModel的getColumn()方法来获取每列的组件,并将其设置为一个MultiRowHeaderRenderer对象。MultiRowHeaderRenderer类实现了TableCellRenderer接口,用于呈现表头中每个单元格的值。 希望这能帮助到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值