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; } }
最近下载更多
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日