Java Swing Ghost组件-JFrame内水平框内的JSplitPane

Java Swing Ghost组件-JFrame内水平框内的JSplitPane,java,swing,Java,Swing,为我正在制作的工具创建一个非常基本的GUI,我遇到了一个不寻常的问题。基本思想是创建一个JList和JTable,并将它们放在一个JSplitPane中。该拆分窗格将占用JFrame中的大部分空间,但也会有一些按钮放置在拆分窗格下,但仍在同一JFrame中。为了完成我想要的设计,我使用了一个水平框作为按钮,垂直框作为拆分窗格和水平按钮框。我已经按照预期设计了拆分窗格,并且可以正常工作,所以我开始进行调整,将按钮添加到JFrame中。当我完成修改时,按钮位于拆分窗格下方的右侧位置,但拆分窗格左侧有

为我正在制作的工具创建一个非常基本的GUI,我遇到了一个不寻常的问题。基本思想是创建一个JList和JTable,并将它们放在一个JSplitPane中。该拆分窗格将占用JFrame中的大部分空间,但也会有一些按钮放置在拆分窗格下,但仍在同一JFrame中。为了完成我想要的设计,我使用了一个水平框作为按钮,垂直框作为拆分窗格和水平按钮框。我已经按照预期设计了拆分窗格,并且可以正常工作,所以我开始进行调整,将按钮添加到JFrame中。当我完成修改时,按钮位于拆分窗格下方的右侧位置,但拆分窗格左侧有一个重影组件。我相信这是件简单而愚蠢的事情,但我就是找不到我错在哪里。下面是一些它看起来的图片

这就是拆分窗格本身的外观。

这就是添加框和按钮后的外观。

我试图去掉分隔窗格左边的空白空间。

以下是相关代码:

列表是JList,表和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);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
列表。设置所选索引(0);
list.addListSelectionListener(此);
listScroll=新的JScrollPane(列表);
viewTable=表格;
columnModel=viewTable.getColumnModel();

对于(int i=0;i在添加到垂直框之前,在包含
BorderLayout
JPanel
中包装
JSplitPane
。结果的不同与每个布局管理器(BoxLayout与BorderLayout)的方式有关管理子组件的大小。

在添加到垂直框之前,将
JSplitPane
包装在包含
BorderLayout
JPanel
中。结果的不同与每个布局管理器(BoxLayout与BorderLayout)的方式有关管理子组件的大小。

在添加到垂直框之前,将JSplitPane包装在包含
边框布局的
JPanel
中。完美!感谢快速回答。在添加到垂直框之前,将JSplitPane包装在包含
边框布局的
JPanel
中。完美!感谢快速回答回答。