【问题标题】:JSplitPane overlaps JButtons in BorderLayout, but does not when layout is nullJSplitPane 与 BorderLayout 中的 JButton 重叠,但当 layout 为 null 时不重叠
【发布时间】:2012-12-06 05:02:24
【问题描述】:

所以我遇到了另一个问题.....

我目前在我的 GUI 中使用 BorderLayout,这样当我调整 jframe 的大小时,所有内部组件都会随之调整大小。在提供这种调整大小功能的同时,我无法获得任何其他布局来满足我希望 GUI 的外观。在顶部我有一个 JMenuBar,在它下面我有一堆按钮。下面我应该有一个 JSplitPane,它就在那里。但是,这些按钮似乎包含在 JSplitPane 中,这不是我的意图。因此,当拆分窗格中发生任何事情时,按钮会消失,直到我再次将鼠标移到它们上方。

当我将布局设置为 null 时,一切都很好,除了我失去了调整大小的能力,这不好。

尝试发布图片,但它不会让我,因为我的代表还没到 10 :(

有什么建议吗? 我尝试将按钮放入 JPanel 然后添加 jpanel 但拆分窗格与此重叠。与 JToolBar 相同。

我添加物品的顺序是:

1) 菜单栏

setJMenuBar(menuBar)

2) 按钮

getContentPane().add(btnZoomIn)

等等

3) 拆分窗格

getContentPane().add(splitPane)

然后你看到的其他东西

【问题讨论】:

  • 有一些代码可以说明问题吗?还是屏幕截图?从外观上看,您应该将按钮添加到getContentPane().add(btnZoomIn, BorderLayout.NORTH),因为边框布局只允许一个组件位于 UI 的中心位置
  • 这里是空布局imgur.com/1X1h7 这里是边框布局imgur.com/xMQUm 也是为了响应borderlayout.north:我已经切换了它,以便将我的6 个按钮中的每一个都添加到jtoolbar 和然后在北点添加了它,就成功了。我的按钮现在看起来很奇怪,因为它们在工具栏中,但是哦,好吧。谢谢你的建议!它帮助很大

标签: java swing jframe jsplitpane border-layout


【解决方案1】:

对我来说似乎工作得很好......

public class BadLayout06 {

    public static void main(String[] args) {
        new BadLayout06();
    }

    public BadLayout06() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JMenuBar mb = new JMenuBar();
                mb.add(new JMenu("File"));

                JToolBar tb = new JToolBar();
                tb.add(new JButton("Zoom In"));
                tb.add(new JButton("Zoom Out"));
                tb.add(new JButton("Invert Image"));
                tb.add(new JButton("Toggle Highlights"));
                tb.add(new JButton("Save"));
                tb.add(new JButton("Cancel"));
                tb.setFloatable(false);

                JSplitPane spSub = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
                JTabbedPane tpLeft = new JTabbedPane();
                tpLeft.add("Table Entry", new JPanel());
                tpLeft.add("Form Entry", new JPanel());
                spSub.setLeftComponent(tpLeft);
                JTabbedPane tpRight = new JTabbedPane();
                tpRight.add("Field Help", new JPanel());
                tpRight.add("Image Navigation", new JPanel());
                spSub.setRightComponent(tpRight);


                JSplitPane spMain = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
                spMain.setLeftComponent(new JPanel());
                spMain.setRightComponent(spSub);


                JFrame frame = new JFrame("Testing");
                frame.setJMenuBar(mb);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(tb, BorderLayout.NORTH);
                frame.add(spMain, BorderLayout.CENTER);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

【讨论】:

  • 是的,在北方位置添加 jtoolbar 对我有用。谢谢!
猜你喜欢
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 2020-05-02
  • 2021-10-17
相关资源
最近更新 更多