[英]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
包裹在包含BorderLayout
的JPanel
中。 結果的差異與每個布局管理器(BoxLayout與BorderLayout)如何管理子組件的大小有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.