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日

