Jtable作为Jtree节点

我知道你可以创建一个表并添加一个JTree作为列 。 但我想要做的就是完全相反。

检查图像并告诉我是否可以。 谢谢!

在此处输入图像描述

更新:

通过使用MKorbel的代码并使用以下代码随机化列数:

@Override public int getColumnCount() { int i = (int) (Math.random( )* 10.0); if (i%2 ==0) return 2; else return 3; } 

我能够得到以下图像:

在此处输入图像描述

1)我没有在RendererEditor以某种方式解决isLeaf()问题

2)如果我将带有JTable JScrollPane直接放到Node (不使用JPanel作为parent ),那么在start_up之后JTree View没有正确呈现以获取更多信息请参阅我的问题在JTree中放置JTable

 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); } }); } }