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

时间:2016-07-06 17:21:46

标签: java swing

为我正在制作的工具创建一个非常基本的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);

提前感谢您的帮助!如果您需要更多信息,请与我们联系。欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

在添加到垂直框之前,将JSplitPane换入包含JPanel的{​​{1}}。结果的不同与每个布局管理器(BoxLayout vs BorderLayout)如何管理子组件的大小有关。