package JTable表头换行;
import java.awt.Component;
import java.awt.Dimension;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class TextAreaHeaderRenderer extends JTextArea implements
		TableCellRenderer {
	/**
	 * 渲染器继承自JTextArea,实现TableCellRenderer接口,具体代码如下:
	 * 此种渲染器的缺点是没有办法实现居中对齐。
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 
	 */
	private final DefaultTableCellRenderer adaptee = new DefaultTableCellRenderer();
	/** map from table to map of rows to map of column heights */
	private final Map cellSizes = new HashMap();
	public TextAreaHeaderRenderer() {
		setLineWrap(true);
		setWrapStyleWord(true);
		setHighlighter(null);
	}
	public Component getTableCellRendererComponent(
			//
			JTable table, Object obj, boolean isSelected, boolean hasFocus,
			int row, int column) {
		// 设置表头渲染时的一些属性参数
		JTableHeader header = table.getTableHeader();
		setForeground(header.getForeground());
		setBackground(header.getBackground());
		setFont(header.getFont());
		setText(obj.toString());
		setBorder(UIManager.getBorder("TableHeader.cellBorder"));
		// This line was very important to get it working with JDK1.4
		TableColumnModel columnModel = table.getColumnModel();
		int width = columnModel.getColumn(column).getWidth();
		setSize(width, 100000);
		int height_wanted = (int) getPreferredSize().getHeight();
		addSize(table, column, height_wanted);
		height_wanted = findTotalMaximumRowSize(table, column);
		if (height_wanted != header.getHeight()) {
			// 设置JTextArea的大小
			this.setSize(new Dimension(width, height_wanted));
		}
		return this;
	}
	private void addSize(JTable table, int column, int height) {
		Map cols = (Map) cellSizes.get(table);
		if (cols == null) {
			cellSizes.put(table, cols = new HashMap());
		}
		Map rowheights = (Map) cols.get(new Integer(column));
		if (rowheights == null) {
			cols.put(new Integer(column), rowheights = new HashMap());
		}
		rowheights.put(new Integer(column), new Integer(height));
	}
	/**
	 * Look through all columns and get the renderer. If it is also a
	 * TextAreaRenderer, we look at the maximum height in its hash table for
	 * this row.
	 */
	private int findTotalMaximumRowSize(JTable table, int column) {
		int maximum_height = 0;
		Enumeration columns = table.getColumnModel().getColumns();
		while (columns.hasMoreElements()) {
			TableColumn tc = (TableColumn) columns.nextElement();
			TableCellRenderer cellRenderer = tc.getHeaderRenderer();
			if (cellRenderer instanceof TextAreaHeaderRenderer) {
				TextAreaHeaderRenderer tar = (TextAreaHeaderRenderer) cellRenderer;
				maximum_height = Math.max(maximum_height, tar
						.findMaximumRowSize(table, column));
			}
			// System.out.println("aaa");
		}
		return maximum_height;
	}
	private int findMaximumRowSize(JTable table, int column) {
		Map rows = (Map) cellSizes.get(table);
		if (rows == null)
			return 0;
		Map rowheights = (Map) rows.get(new Integer(column));
		if (rowheights == null)
			return 0;
		int maximum_height = 0;
		for (Iterator it = rowheights.entrySet().iterator(); it.hasNext();) {
			Map.Entry entry = (Map.Entry) it.next();
			int cellHeight = ((Integer) entry.getValue()).intValue();
			maximum_height = Math.max(maximum_height, cellHeight);
		}
		return maximum_height;
	}
}
最近下载更多
                
                微信网友_7626337186549760     LV1
                8月4日
            
            
        
                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日
            
            
        
最近浏览更多
                
                微信网友_7626337186549760     LV1
                8月4日
            
            
        
                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     LV11
                2024年5月27日
            
            
        
                1219610676     LV4
                2023年12月7日
            
            
        
                李朝磊     LV18
                2023年12月3日
            
            
        
    
    
                