- 论坛徽章:
- 0
|
做过Java GUI的同学也许会遇到这样的问题, 自己定义的table列不需要那么宽, 然而列标题字符又过多, 不得不把整个表格撑得挤挤的。 那么如何实现可以设置表头换行呢, 从而压缩列宽?
其实很简单的, 首先, 我们只需要把这个class加入自己的程序:
/*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package gl.prd.ui;
import java.awt.Component;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.Vector;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class MultiLineHeaderRenderer extends JList implements TableCellRenderer {
public MultiLineHeaderRenderer() {
setOpaque(true);
// setForeground(UIManager.getColor("TableHeader.foreground"));
// setBackground(UIManager.getColor("TableHeader.background"));
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
ListCellRenderer renderer = getCellRenderer();
((JLabel) renderer).setHorizontalAlignment(JLabel.CENTER);
setCellRenderer(renderer);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (table != null) {
JTableHeader header = table.getTableHeader();
if (header != null) {
setForeground(header.getForeground());
setBackground(header.getBackground());
setFont(header.getFont());// setName("dd"+"\n"+"dd");
}
}
setFont(table.getFont());
String str = (value == null) ? "" : value.toString();
BufferedReader br = new BufferedReader(new StringReader(str));
String line;
Vector v = new Vector();
try {
while ((line = br.readLine()) != null) {
v.addElement(line);
}
} catch (IOException ex) {
ex.printStackTrace();
}
setListData(v);
return this;
}
}
然后, 在自己的设置标题方法(setTableHeader)中,加上:
// 生产次序
dateColumn = new TableColumn();
dateColumn.setPreferredWidth(33);
dateColumn.setHeaderRenderer(new MafStatMLHeaderRenderer());
dateColumn.setHeaderValue("生产" + "\n" + "次序");
dateColumn.setModelIndex(iModelIndex++);
model.addColumn(dateColumn);
这样就可以啦! 效果如下:
![]()
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/14706/showart_86895.html |
|