首页>代码>java Swing JTable的复杂表格应用实例>/SwingJTable/src/JTable表头换行/HeaderRendererHh.java
package JTable表头换行;

import java.awt.Component;   
import java.awt.Dimension;   
import java.awt.FontMetrics;   
  
import javax.swing.JLabel;   
import javax.swing.JTable;   
import javax.swing.UIManager;   
import javax.swing.table.DefaultTableCellRenderer;   
import javax.swing.table.JTableHeader;   
import javax.swing.table.TableColumnModel;   
  
public class HeaderRendererHh extends DefaultTableCellRenderer {   
  
    /**
	 * 因为JLabel可以解析html中的br,所以利用这个特点,
	 * 可以动态构建显示的标题,在换行处添加<br>标记,实现换行显示
	 */
	private static final long serialVersionUID = 1L;

	public Component getTableCellRendererComponent(JTable table, Object value,   
            boolean isSelected, boolean hasFocus, int row, int column) {   
  
        JTableHeader header = table.getTableHeader();   
        setForeground(header.getForeground());   
        setBackground(header.getBackground());   
        setFont(header.getFont());   
        setOpaque(true);   
        setBorder(UIManager.getBorder("TableHeader.cellBorder"));   
  
        // 得到列的宽度   
        TableColumnModel columnModel = table.getColumnModel();   
        int width = columnModel.getColumn(column).getWidth();   
  
        value = getShowValue(value.toString(), width);   
        setText(value.toString());   
        setSize(new Dimension(width, this.getHeight()));   
  
        setHorizontalAlignment(JLabel.CENTER);   
  
        return this;   
    }   
  
    private Object getShowValue(String value, int colWidth) {   
        // 根据当前的字体和显示值得到需要显示的宽度   
        FontMetrics fm = this.getFontMetrics(this.getFont());   
        int width = fm.stringWidth(value.toString());   
        int test = fm.stringWidth("好");   
        System.out.println(test * value.length());   
        System.out.println(width);   
        if (width < colWidth) {   
            return value;   
        }   
        StringBuffer sb = new StringBuffer("<html>");   
        char str;   
        int tempW = 0;   
        for (int i = 0; i < value.length(); i++) {   
            str = value.charAt(i);   
            tempW += fm.charWidth(str);   
            if (tempW > colWidth) {   
                sb.append("<br>");   
                tempW = 0;   
            }   
            sb.append(str);   
        }   
        sb.append("</html>");   
        return sb.toString();   
    }   
}
最近下载更多
duanjb  LV1 8月15日
1219610676  LV4 2023年12月7日
1a2s3d4f5g6h  LV1 2023年6月21日
yaowusui  LV1 2023年4月27日
xizi10086  LV2 2023年4月25日
2252536772  LV21 2022年11月9日
微信网友_6187879953633280  LV1 2022年10月23日
lcb813  LV1 2022年7月1日
微信网友_5996744821641216  LV1 2022年6月10日
newbeall  LV1 2022年2月26日
最近浏览更多
duanjb  LV1 8月15日
2860615178  LV4 5月29日
3334004690  LV10 5月27日
1219610676  LV4 2023年12月7日
李朝磊  LV18 2023年12月3日
yangxb2  LV10 2023年10月20日
lingtiejing  LV15 2023年6月25日
1a2s3d4f5g6h  LV1 2023年6月21日
啊伟大伟大 2023年6月19日
暂无贡献等级
yaowusui  LV1 2023年5月3日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友