java JTable表头自动换行

本文介绍了一种自定义的Swing组件——多行表头渲染器,该组件允许表格的头部显示多行文本,提高了表格头部信息的展示效率。

package util;

import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import java.awt.Component;
import javax.swing.UIManager;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2008</p>
 * <p>Company: </p>
 * @Author SamZheng 2008-03-31
 * @version 1.0
 */

public class MultiLineHeaderRenderer extends JTextArea implements TableCellRenderer{
  private final DefaultTableCellRenderer adaptee = new DefaultTableCellRenderer();

  public MultiLineHeaderRenderer() {
    super(1, 50);
    setOpaque(true);
    setLineWrap(true);
    setWrapStyleWord(true);
  }

  public Component getTableCellRendererComponent(JTable table, Object obj,
                                                 boolean isSelected, boolean hasFocus,
                                                 int row,int column) {
    int width = 1;
    String value = "";
    if (table != null) {
      JTableHeader header = table.getTableHeader();
      if (header != null) {
        setForeground(header.getForeground());
        setBackground(header.getBackground());
        setFont(header.getFont());
      }
      width = header.getColumnModel().getColumn(column).getWidth();
      if(width==0)
        width = 150;
      value = header.getColumnModel().getColumn(column).getHeaderValue().toString();
    }
    setText( (value == null) ? "Column:" + column : value.toString());
    setBorder(UIManager.getBorder("TableHeader.cellBorder"));
    this.setRows((10*value.length())/width);
    //JScrollPane sp = new JScrollPane(this);
    return this;
  }
}

MultiLineHeaderRenderer multiLineHeaderRenderer = new MultiLineHeaderRenderer();
    TableColumnModel cmodel = tblMain.getColumnModel();
    cmodel.getColumn(0).setHeaderRenderer(multiLineHeaderRenderer);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值