2012-01-12 16 views
8

table and add a JTree as a columnを作成することができます。しかし、私がしたいことは完全な反対です。JtreeノードとしてのJtable

画像を確認し、これが可能かどうか教えてください。ありがとう!

enter image description here

UPDATE:

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

私は、次の画像を得ることができた:

MKorbelのコードを使用することで、次のコードで列数をランダム化することにより、

enter image description here

私は何とか私が直接 NodeJTableJScrollPaneを置けば

2)、(当時JTree Viewが正しくためSTART_UP後に表示されませんJPanelparentとして使用せずRendererisLeaf()Editorを解決していない

+1

私はそれをテストしていない参照してくださいが、なぜこれが可能にすべきではありません。 APIは、レンダラーがコンポーネントを返すことを要求します。そして、JTableはコンポーネントです。 JTableでの編集/選択は難しいかもしれません – Robin

+0

@Robinしかし、私は視覚的に意味します、それは適切ですか?何か問題があるのでしょうか? –

+0

これは興味深いことです。私の2セント:あなたのテーブルが大きければ、視覚的に感じるだけで、あなたのツリーは一種のファンキーに見えるかもしれません。また、実際にテーブルとやりとりすることができるかどうか不思議です。それはテーブルのイメージにすぎませんか? – user489041

答えて

7

1)詳細は私の質問Put JTable in the 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); 
      } 
     }); 
    } 
} 
+0

あなたのコードをありがとうございます。私は私の質問で更新された結果を得るために少し修正しました。私はそれを行うための最良の方法で修正したものがあれば疑問に思っていましたか? –

+0

テーブルは編集できません。テーブルの内容を編集するには – Madhan

関連する問題