簡體   English   中英

如何在java swing應用程序中實現JTables的擴展/折疊性質

[英]How to implement expand/collapse nature to JTables in java swing application

在我的應用程序中,我顯示了一個包含大量數據的表列表。 所有表都可能不適合窗口,我們需要滾動才能看到底部表格。 在這里,我需要擴展/折疊性質到表。 用戶可以選擇他希望在所有表中看到哪些表。 這是我的應用程序的示例屏幕截圖。 在此輸入圖像描述

我該怎么做。 任何建議將不勝感激。

  1. 您可以嘗試JXTreeTableTreeTable

  2. 或者您可以切換jtable的可見性以進行展開/折疊效果。 首先當它可見並使用選擇折疊時使用setVisible(false); 並在擴展中反轉。 [不確定這是否有效。]

org.netbeans.swing.outline.Outline是一個吸引人的選擇,正如這里這里所討論的。

如果您使用DesignGridLayout ,可以很容易地實現基於可見性的展開/折疊效果(如Harry提出的第二個選項):

DesignGridLayout layout = new DesignGridLayout(panel);
...
JCheckBox expand1 = newCheckBox("First");
layout.row().left().add(expand1);
final IRow row = layout.row().grid().add(table1);
expand.setSelected(true);
expand.addItemListener(new ItemListener()
{
    @Override public void itemStateChanged(ItemIvent event)
    {
        if (event.getStateChanged() == ItemIvent.SELECTED)
            row.show();
        else
            row.hide();
    }
};

panel每個表重復上面的代碼(在“ ... ”之后)。

使用上面的代碼,每個標簽都替換為一個復選框,當取消選中時,隱藏下面的表格。

您可以在“ 動態布局 ”部分下查看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); 

編輯(忘記了片段中的taskPane,從未發布過咖啡;-)

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();}

將面板(panel1,panel2 ..)添加到'masterlayout'以獲得所需的外觀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM