Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jtable,每行可扩展Jtable_Java_Jtable_Jtree_Jtreetable - Fatal编程技术网

Java Jtable,每行可扩展Jtable

Java Jtable,每行可扩展Jtable,java,jtable,jtree,jtreetable,Java,Jtable,Jtree,Jtreetable,我试图获得一个表,在该表中,您可以使用+或任何符号折叠行,如下图中的Access: 事实上,我希望有同样的行为,像这样的专栏标题。我将只使用两个级别:一个有+和一个没有(不同的父母有不同的孩子,但孩子不会是父母)。目前我正在Jtree中尝试Jtable,但我离目标很远,结果也不太接近。。。我不能编辑表格单元格,也不能像这种情况下那样使用列名(如果我输入列的标题,则每个父项都会有标题)。您知道一些java swing组件具有我想要获得的行为,或者一些代码可以实现这一点吗?我写的代码有什么帮助吗

我试图获得一个表,在该表中,您可以使用+或任何符号折叠行,如下图中的Access:

事实上,我希望有同样的行为,像这样的专栏标题。我将只使用两个级别:一个有+和一个没有(不同的父母有不同的孩子,但孩子不会是父母)。目前我正在Jtree中尝试Jtable,但我离目标很远,结果也不太接近。。。我不能编辑表格单元格,也不能像这种情况下那样使用列名(如果我输入列的标题,则每个父项都会有标题)。您知道一些java swing组件具有我想要获得的行为,或者一些代码可以实现这一点吗?我写的代码有什么帮助吗

import java.awt.BorderLayout;
import java.awt.Component;
import java.util.EventObject;

//  www .ja va  2s  .  c  o m
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.ListSelectionModel;
import javax.swing.event.CellEditorListener;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellEditor;
import javax.swing.tree.TreeCellRenderer;

public class main extends JFrame {

  private JTree tree;

  public main() {
    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.setRootVisible(false);
    tree.setShowsRootHandles(true);
    for (int i = 0; i<tree.getRowCount(); i++){
        tree.expandRow(i);
    }
    tree.setCellRenderer(new MyTableInTreeCellRenderer());
    tree.setRowHeight(0);
    JScrollPane jsp = new JScrollPane(tree);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    add(jsp, BorderLayout.CENTER);
    pack();
  }

  public static void main(String[] args) throws Exception {

    new main().setVisible(true);

  }
}

class MyTableInTreeCellRenderer extends JPanel implements TreeCellRenderer {

  private JTable table;

  public MyTableInTreeCellRenderer() {
    super(new BorderLayout());
    table = new JTable();    
    JScrollPane scrollPane = new JScrollPane(table);
    table.setTableHeader(null);
    table.setAutoCreateRowSorter(true);
    table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    table.setCellSelectionEnabled(true);
    table.setColumnSelectionAllowed(true);

    //No column ordering. Must be before setModel
    table.setColumnModel(new DefaultTableColumnModel() {
        /**
         * 
         */
        private static final long serialVersionUID = 5;

        public void moveColumn(int columnIndex, int newIndex) {
                super.moveColumn(columnIndex, columnIndex);
        }
    });
    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() {
      @Override
      public int getRowCount() {
        return 1;
      }
      @Override
      public int getColumnCount() {
        return 3;
      }
      @Override
      public Object getValueAt(int row, int column) {
        return v + ":" + row + ":" + column;
      }
    });
    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    return this;
  }
}
导入java.awt.BorderLayout;
导入java.awt.Component;
导入java.util.EventObject;
//www.java2s。科尔姆
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.JTree;
导入javax.swing.ListSelectionModel;
导入javax.swing.event.CellEditorListener;
导入javax.swing.table.DefaultTableColumnModel;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.tree.DefaultMutableTreeNode;
导入javax.swing.tree.TreeCellEditor;
导入javax.swing.tree.TreeCellRenderer;
公共类主框架{
私有JTree树;
公用干管(){
DefaultMutableTreeNode AA1=新的DefaultMutableTreeNode(“AA1”);
DefaultMutableTreeNode AA2=新的DefaultMutableTreeNode(“AA2”);
DefaultMutableTreeNode A=新的DefaultMutableTreeNode(“A”);
A.添加(AA1);
A.添加(AA2);
DefaultMutableTreeNode BB1=新的DefaultMutableTreeNode(“BB1”);
DefaultMutableTreeNode BB2=新的DefaultMutableTreeNode(“BB2”);
DefaultMutableTreeNode B=新的DefaultMutableTreeNode(“B”);
B.添加(BB1);
B.添加(BB2);
DefaultMutableTreeNode CC1=新的DefaultMutableTreeNode(“CC1”);
DefaultMutableTreeNode CC2=新的DefaultMutableTreeNode(“CC2”);
DefaultMutableTreeNode C=新的DefaultMutableTreeNode(“C”);
C.add(CC1);
C.添加(CC2);
DefaultMutableTreeNode根=新的DefaultMutableTreeNode(“根”);
加上(A);
加上(B);
加上(C);
树=新的JTree(根);
tree.setRootVisible(false);
tree.setShowsRootHandles(真);

对于(int i=0;i对于那些寻找类似事物的人,我发现:

如果您想使用swingX,我找到的每个链接都已断开(java.net不再存在),我也找不到官方存储库。但是,您仍然可以在几个github个人项目中找到swingX项目的最后一次上载,这些项目都复制了它,如下所示:


目前我正在Jtree中尝试Jtable
-这是基本方法。我建议您在论坛/网站上搜索JTreeTable以查找示例。您可能希望使用SwingX中的JXTreeTable,它是一个为Swing组件提供扩展的库。SwingX的官方存储库是什么?我只能找到断开的链接抱歉,我不知道。可能它不再受支持。您仍然可以尝试搜索web。可能还有其他示例。