首页>代码>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();   
    }   
}
最近下载更多
taozhao  LV2 1月20日
深深之蓝  LV1 2024年12月16日
lk-sheep  LV1 2024年12月2日
duanjb  LV1 2024年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日
最近浏览更多
pxqtsht  LV16 2月21日
taozhao  LV2 1月20日
深深之蓝  LV1 2024年12月16日
lk-sheep  LV1 2024年12月2日
duanjb  LV1 2024年8月15日
2860615178  LV4 2024年5月29日
3334004690  LV10 2024年5月27日
1219610676  LV4 2023年12月7日
李朝磊  LV18 2023年12月3日
yangxb2  LV10 2023年10月20日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友