liên quan đến chủ đề Jtable as a Jtree Node tôi đặt JTable để JTree, nhưng JTree
Xem không hiển thị đúng trên start_up, làm thế nào tôi có thể setPreferredSize
cho JTable
, vì PreferredScrollableViewportSize
co JTable
với rendering TableHeader
+ một , một vẫn ẩn, nhưng sau khi mở rộng Node (s) thay đổi TreeRenderer và sơn lại các setPreferredSize
với dự kiến Dimension
Đặt JTable trong JTree
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.*;
public class TreeWithTableRenderer extends JFrame {
private static final long serialVersionUID = 1L;
private JTree tree;
public TreeWithTableRenderer() {
DefaultMutableTreeNode AA1 = new DefaultMutableTreeNode("AA1");
DefaultMutableTreeNode AA2 = new DefaultMutableTreeNode("AA2");
DefaultMutableTreeNode A = new DefaultMutableTreeNode("A");
A.add(AA1);
A.add(AA2);
DefaultMutableTreeNode BB1 = new DefaultMutableTreeNode("BB1");
DefaultMutableTreeNode BB2 = new DefaultMutableTreeNode("BB2");
DefaultMutableTreeNode B = new DefaultMutableTreeNode("B");
B.add(BB1);
B.add(BB2);
DefaultMutableTreeNode CC1 = new DefaultMutableTreeNode("CC1");
DefaultMutableTreeNode CC2 = new DefaultMutableTreeNode("CC2");
DefaultMutableTreeNode C = new DefaultMutableTreeNode("C");
C.add(CC1);
C.add(CC2);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
root.add(A);
root.add(B);
root.add(C);
tree = new JTree(root);
tree.setCellRenderer(new MyTableInTreeCellRenderer());
tree.setRowHeight(0);
JScrollPane jsp = new JScrollPane(tree);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(jsp, BorderLayout.CENTER);
pack();
setLocationRelativeTo(null);
}
class MyTableInTreeCellRenderer extends JPanel implements TreeCellRenderer {
private static final long serialVersionUID = 1L;
private JTable table;
public MyTableInTreeCellRenderer() {
super(new BorderLayout());
table = new JTable();
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
final String v = (String) ((DefaultMutableTreeNode) value).getUserObject();
table.setModel(new DefaultTableModel() {
private static final long serialVersionUID = 1L;
@Override
public int getRowCount() {
return 2;
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(int row, int column) {
return v + ":" + row + ":" + column;
}
});
table.setPreferredScrollableViewportSize(table.getPreferredSize());
return this;
}
}
public static void main(String[] args) throws Exception {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TreeWithTableRenderer().setVisible(true);
}
});
}
}
không tôi cần có JScrollPane theo mặc định, hmmm loại bỏ JScrollPane, tôi nghĩ rằng đây là đề nghị sai, bởi vì JTable này có thể có một Row cùng như hàng 5T, không quan trọng tôi đã quên http://stackoverflow.com/questions/7369814/why-does-the-jtable-header-not-appear-in-the-image, cảm ơn bạn – mKorbel