我在使用树表(TTreeTable)组件的时候,不想显示表格的表头,于是使用采用setHeader(null)的方 式,去掉了表头,但发现这样的话,表格中树的列宽无法自适应表中内容的宽度,而采用getHeader().setVisible(false)的方式来 隐藏表头的话,表头无法正常隐藏。
那还有其他方法来隐藏树表的表头吗?要求树节点的显示宽度可以自适应节点中显示的内容长度。
答案是:
只要不将table放在JScrollPane中就不会显示表头,如果放在JPanel中,注意Layout,如果还需要滚动条,在jPanel外再套个JScrollPane
package swing.table;
import java.awt.BorderLayout;
import java.awt.Component;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import twaver.ElementAttribute;
import twaver.Node;
import twaver.TDataBox;
import twaver.TWaverUtil;
import twaver.table.TTreeTable;
public class TreeTableWithoutHeaderTest {
public static void main(String[] arg) {
final TDataBox box = new TDataBox();
final TTreeTable table = new TTreeTable(box);
table.setElementClass(Person.class);
List attributes = new ArrayList();
ElementAttribute nameAttribute = new ElementAttribute();
nameAttribute.setName("name");
nameAttribute.setDisplayName("Name");
nameAttribute.setEditable(false);
attributes.add(nameAttribute);
ElementAttribute ageAttribute = new ElementAttribute();
ageAttribute.setClientPropertyKey("age");
ageAttribute.setDisplayName("Age");
ageAttribute.setEditable(false);
attributes.add(ageAttribute);
table.registerElementClassAttributes(Person.class, attributes);
box.addElement(new Person("Sam", 89));
box.addElement(new Person("Tom", 12));
box.addElement(new Person("Lisa", 20));
for(int i=0;i<10;i++){
box.addElement(new Person("dSS"+i,i));
}
final Person father=new Person("Pete", 30);
Person sun=new Person("Pete's son", 10);
father.addChild(sun);
box.addElement(father);
box.addElement(sun);
table.getTree().setRootVisible(true);
table.getTree().expandAll();
//table in JScrollPane with Borderlayout.center
// showFrame("", new JScrollPane(table));
//table in jPanel with Borderlayout.center
// showFrame("", table);
//table in jPanel
JPanel mainPane=new JPanel();
mainPane.add(table);
showFrame("", mainPane);
}
public static JFrame showFrame(String title, Component component) {
JFrame frame = new JFrame();
frame.setTitle(title);
frame.getContentPane().add(component, BorderLayout.CENTER);
frame.setSize(400, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TWaverUtil.centerWindow(frame);
frame.setVisible(true);
return frame;
}
public static class Person extends Node {
public Person(String name, int age) {
this.setName(name);
this.putClientProperty("age", age);
}
public int getAge(){
return Integer.valueOf(this.getClientProperty("age").toString()).intValue();
}
}
}