2012-01-12 19 views
8

olarak Jtable oluşturabileceğinizi biliyorum table and add a JTree as a column. Ama yapmak istediğim tam tersi.Bir Jtree Düğüm Jperee

Görüntüyü kontrol edin ve bunun mümkün olup olmadığını bana bildirin. Teşekkürler!

enter image description here

GÜNCELLEME:

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

aşağıdaki görüntü elde edebildi:

MKorbel kodunu kullanarak ve aşağıdaki kodla sütun sayısını randomize ederek

enter image description here

Bir şekilde doğrudan Node için JTable ile JScrollPane koymak

2), (o JTree View doğru için START_UP sonra işlenen değildir JPanel) parent olarak kullanılmadan Renderer içinde isLeaf() ve Editor çözmek değildi

+1

Denemedim, ama neden bu mümkün olmamalı. API, oluşturucunun bir bileşen döndürmesini ister. Ve bir JTable bir bileşendir. JTable'da düzenleme/seçme daha zor olabilir – Robin

+0

@Robin Ancak görsel olarak demek uygun mu? Herhangi bir zorluğu var mı? –

+0

Şimdi bu ilginç. 2 sentlerim: Sadece tablolarınız büyükse görsel olarak hissediyorum, ağacınız biraz tuhaf görünebilir. Ayrıca, aslında masa ile etkileşime girip giremeyeceğinizi merak ediyorum. Bu sadece masanın bir resmi mi? – user489041

cevap

7

1) daha fazla bilgi için lütfen sorularıma bakın:

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

Kodunuz için teşekkür ederiz. Sorumlu Güncelleme sonucunu almak için biraz değiştirdim. Bunu yapmanın en iyi yolu ile ne değiştirdiğimi merak ettim mi? –

+0

Ancak Tablo düzenlenebilir değil. Tablo içeriğini düzenlemek için – Madhan