【问题标题】:Java Swing Ghost Component - JSplitPane inside horizontal box inside JFrameJava Swing Ghost 组件 - JFrame 内水平框内的 JSplitPane
【发布时间】:2016-07-06 17:21:46
【问题描述】:

为我正在制作的工具创建一个非常基本的 GUI,但我遇到了一个不寻常的问题。基本思想是创建一个 JList 和 JTable 并将它们放在 JSplitPane 中。该拆分窗格将占用 JFrame 中的大部分空间,但也会有一些按钮位于拆分窗格下方,但仍位于同一个 JFrame 中。为了完成我想要的设计,我使用水平框作为按钮,使用垂直框作为拆分窗格和水平按钮框。我设计了拆分窗格并按需要工作,因此我开始进行调整以将按钮也添加到 JFrame。当我完成修改后,按钮位于拆分窗格下方的正确位置,但拆分窗格左侧有一个幻影组件。我确定它是简单而愚蠢的,但我就是找不到哪里出错了。这是它的外观图片。

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

这是添加了框和按钮后的样子。 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);

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

【问题讨论】:

  • 在添加到垂直框之前将 JSplitPane 包装在包含 BorderLayoutJPanel 中。
  • 完美!感谢您的快速回答。

标签: java swing


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2013-05-21
    • 2012-01-29
    • 2011-05-25
    相关资源
    最近更新 更多