繁体   English   中英

Jtable,每行可扩展的jtable

[英]Jtable with expandable jtable for each row

我正在尝试获取一个表,您可以在其中使用+或任何符号折叠行,如Access中的此图像:

在此处输入图片说明

实际上,我希望具有相同的行为,并具有类似列的标题。 我将仅使用2个级别:具有+的级别和不具有+的级别(具有不同孩子的不同父母,但孩子不会成为父母)。 目前,我正在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;
  }
}

对于那些寻找类似东西的人,我发现了这一点:

http://www.hameister.org/JavaSwingTreeTable.html

如果要使用swingX,我发现的每个链接都将断开(java.net不再存在),而且我也找不到正式的存储库。 但是,您仍然可以在几个github个人项目中找到SwingX项目的最后一个上载,他们像这样复制了它:

https://github.com/arotenberg/swingx/releases

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM