为我正在制作的工具创建一个非常基本的GUI,我遇到了一个不寻常的问题。基本思想是创建一个JList和JTable并将它们放在JSplitPane中。该拆分窗格将占用JFrame中的大部分空间,但在拆分窗格下也会放置一些按钮但仍位于同一个JFrame中。为了完成我想要的设计,我使用水平Box作为按钮,使用垂直Box分割窗格和水平按钮Box。我根据需要设计了分割窗格,因此我开始进行调整以将按钮添加到JFrame中。当我完成修改后,按钮位于拆分窗格下的正确位置,但是拆分窗格左侧有一个鬼组件。我确信它简单而愚蠢,但我无法找到我出错的地方。这是一些它看起来如何的照片。
这是拆分窗格自身的外观。 Split Pane only
这是它添加的Boxes和Buttons的外观。 Boxes and Buttons
我试图摆脱拆分窗格左侧的空白区域。
这是相关代码:
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);
提前感谢您的帮助!如果您需要更多信息,请与我们联系。欢迎任何建议。
答案 0 :(得分:2)
在添加到垂直框之前,将JSplitPane
换入包含JPanel
的{{1}}。结果的不同与每个布局管理器(BoxLayout vs BorderLayout)如何管理子组件的大小有关。