簡體   English   中英

Java Swing Ghost組件-JFrame內水平框內的JSplitPane

[英]Java Swing Ghost Component - JSplitPane inside horizontal box inside JFrame

為我正在制作的工具創建一個非常基本的GUI,但遇到了一個不尋常的問題。 基本思想是創建一個JList和JTable並將它們放在JSplitPane中。 該拆分窗格將占用JFrame中的大部分空間,但在拆分窗格下還會有一些按鈕,但它們仍在同一JFrame中。 為了完成我想要的設計,我在按鈕上使用了水平框,在拆分窗格中使用了垂直框,在水平按鈕上使用了水平框。 我已經設計了拆分窗格並按需要工作,因此我開始進行調整,以將按鈕也添加到JFrame。 完成修改后,這些按鈕位於拆分窗格的右側位置,但是拆分窗格的左側有一個幻影組件。 我敢肯定它有些簡單而愚蠢,但我只是找不到我要去哪里。 這是一些外觀的圖片。

這就是分割窗格的外觀。 僅拆分窗格

添加了“框”和“按鈕”后的樣子。 框和按鈕

我試圖擺脫拆分窗格左側的空白區域。

這是相關代碼:

list是一個JList,table和viewTable是JTables

    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    list.setSelectedIndex(0);
    list.addListSelectionListener(this);
    listScroll = new JScrollPane(list);
    viewTable = table;
    columnModel = viewTable.getColumnModel();
    for(int i = 0;i<columnModel.getColumnCount();i++)
        columnModel.getColumn(i).setMinWidth(150);
    viewTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    dataScroll = new JScrollPane(viewTable,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    dataScroll.getHorizontalScrollBar().setUnitIncrement(150);

    splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,listScroll,dataScroll);

    JFrame viewFrame = new JFrame("View/Delete");
    viewFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton deleteButton, revertButton, viewCancelButton;
    Box viewBox = Box.createVerticalBox();
    Box ButtonBox = Box.createHorizontalBox();
    viewCancelButton = new JButton("Cancel");
    viewCancelButton.addActionListener(this);
    revertButton = new JButton("Revert Changes");
    revertButton.addActionListener(this);
    deleteButton = new JButton("Delete");
    deleteButton.addActionListener(this);
    ButtonBox.add(viewCancelButton);
    ButtonBox.add(Box.createRigidArea(new Dimension(30,0)));
    ButtonBox.add(revertButton);
    ButtonBox.add(Box.createRigidArea(new Dimension(30,0)));
    ButtonBox.add(deleteButton);
    viewBox.removeAll();
    viewBox.add(splitPane);
    viewBox.add(Box.createRigidArea(new Dimension(0,30)));
    viewBox.add(ButtonBox);
    viewBox.add(Box.createRigidArea(new Dimension(0,30)));
    viewBox.setVisible(true);
    viewFrame.add(viewBox);
    viewFrame.pack();
    viewFrame.setVisible(true);

先謝謝您的幫助! 讓我知道您是否需要更多信息。 歡迎任何建議。

在添加到垂直框中之前,將JSplitPane包裹在包含BorderLayoutJPanel中。 結果的差異與每個布局管理器(BoxLayout與BorderLayout)如何管理子組件的大小有關。

暫無
暫無

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

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