如何在JavaSwing应用程序中实现JTables的扩展/折叠特性

如何在JavaSwing应用程序中实现JTables的扩展/折叠特性,java,swing,jtable,expand,collapse,Java,Swing,Jtable,Expand,Collapse,在我的应用程序中,我显示了一个包含大量数据的表列表。所有的表格可能都不适合该窗口,我们需要滚动查看底部的表格。在这里,我需要扩展/折叠表。用户可以在所有表中选择要查看的表。这是我的应用程序示例屏幕截图。 我该怎么做呢。如有任何建议,将不胜感激 你可以试试看 或者您可以切换jtable的可见性以产生展开/折叠效果。首先,当它是可见的并且使用时,选择塌陷使用setVisible(false)并在展开中执行反向操作。[不确定这是否有效。] 如前所述,这是一个很有吸引力的替代方案。基于可见性的扩展/折

在我的应用程序中,我显示了一个包含大量数据的表列表。所有的表格可能都不适合该窗口,我们需要滚动查看底部的表格。在这里,我需要扩展/折叠表。用户可以在所有表中选择要查看的表。这是我的应用程序示例屏幕截图。

我该怎么做呢。如有任何建议,将不胜感激

  • 你可以试试看

  • 或者您可以切换jtable的可见性以产生展开/折叠效果。首先,当它是可见的并且使用时,选择塌陷使用
    setVisible(false)并在展开中执行反向操作。[不确定这是否有效。]


  • 如前所述,这是一个很有吸引力的替代方案。

    基于可见性的扩展/折叠效果,如Harry提出的第二个选项,如果您使用:

    面板中的每个表重复上述代码(在“
    ”之后)

    使用上面的代码,每个标签都会替换为一个复选框,如果未选中该复选框,则会隐藏下面的表


    您可以在“动态布局”部分下查看DesignGridLayout示例应用程序(在主页上作为WebStart提供)。

    另一种选择是使用SwingX的JXTaskPane

      JXTaskPaneContainer container = new JXTaskPaneContainer();
      forEach table:
         JXTaskPane pane = new JXTaskPane(tableTitle);
         pane.add(table);
         container.add(pane);
      somePanel.add(new JScrollPane(container); 
    
    已编辑(忘记了代码段中的任务窗格,在咖啡之前从不发布;-)


    将面板(panel1、panel2..)添加到“主布局”以获得所需的外观

    对于第2点,它可能会起作用,具体取决于使用的LayoutManager。有些LayoutManager能够处理组件的动态可见性,而有些则不能。@jfpoilpret:是的。这就是为什么我不确定这一点,因为我们不知道layout manager OP使用的是哪一个
      JXTaskPaneContainer container = new JXTaskPaneContainer();
      forEach table:
         JXTaskPane pane = new JXTaskPane(tableTitle);
         pane.add(table);
         container.add(pane);
      somePanel.add(new JScrollPane(container); 
    
    public DesignGridTest(){
    
            JFrame frame = new JFrame("Example 1");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JPanel masterpanel = new JPanel();
            DesignGridLayout masterlayout = new DesignGridLayout(masterpanel);
    
            JCheckBox chk1 = new JCheckBox("Check Box1");
            masterlayout.row().left().add(chk1);    
    
            JPanel panel1 = new JPanel();
            JTable table1 = new JTable();
            table1.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null}
                },
                new String [] {
                    "Title 1", "Title 2", "Title 3", "Title 4"
                }
            ));
            panel1.add(table1);
            final IRow row1 = masterlayout.row().grid().add(panel1);
            chk1.setSelected(true);
            chk1.addItemListener(new ItemListener()
            {
                @Override public void itemStateChanged(ItemEvent event)
                {
                    if (event.getStateChange() == ItemEvent.SELECTED)
                        row1.show();
                    else
                        row1.hide();
                    frame.pack();
                }
            });     
            frame.add(masterpanel);
            frame.pack();
            frame.setVisible(true);
        }
        public static void main(String a[]){new DesignGridTest();}