2016-07-06 47 views
0

爲我正在創建的工具創建一個非常基本的GUI,並且遇到了一個不尋常的問題。基本的想法是創建一個JList和JTable,並將它們放在一個JSplitPane中。該分割窗格將佔用JFrame中的大部分空間,但在分割窗格下方也會有幾個按鈕,但仍位於同一個JFrame內。爲了完成我想要的設計,我使用了一個水平方向的按鈕框,以及一個垂直的方框,用於分割窗格和水平按鈕方框。我設計了分割窗格並按照需要工作,因此我開始進行調整以將按鈕添加到JFrame中。完成修改後,按鈕位於拆分窗格下的正確位置,但在拆分窗格左側有一個幻影組件。我敢肯定它有些簡單而愚蠢,但我無法找到我要去哪裏的錯誤。以下是它的外觀圖片。Java Swing Ghost組件 - JSplitPane內部水平框內JFrame

這是拆分窗格自身的外觀。 Split Pane only

這是它看起來是如何與框和按鈕添加。 Boxes and Buttons

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

這是相關代碼:

列表是一個JList,桌子和viewTable是JTable中

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

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

+0

在添加到垂直框之前,將JSplitPane包裝在包含「BorderLayout」的'JPanel'中。 – copeg

+0

完美!感謝你及時的答覆。 – Evan

回答

2

JSplitPane換成JPanel,其中包含BorderLayout,然後再添加到垂直框中。結果的不同與每個佈局管理器(BoxLayout vs BorderLayout)如何管理子組件的大小有關。