首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java: Swing困难

Java: Swing困难
EN

Stack Overflow用户
提问于 2010-10-26 00:23:14
回答 2查看 339关注 0票数 1

我在尝试修改GUI。它托管一个显示JOGL内容的GLCanvas。

下面是设置它的代码:

代码语言:javascript
复制
private void setupWindow() {
    this.frame = new JFrame(WINDOW_TITLE);
    frame.setSize(width, height);
    frame.setVisible(true);

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });

    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("File");
    menuBar.add(menu);
    JMenuItem exitItem = new JMenuItem("Exit");
    exitItem.addActionListener(listener);
    menu.add(exitItem);
    frame.setJMenuBar(menuBar);
}

目前,画布占据了整个窗口的空间,除了菜单栏。我想为窗口中的其他控件留出空间,比如按钮和列表框。我该怎么做呢?

我尝试插入以下内容,但没有成功:

代码语言:javascript
复制
private void setupWindow() {
    this.frame = new JFrame(WINDOW_TITLE);
    frame.setSize(width, height);

    // ** inserted the following:
    JPanel canvasPanel = new JPanel(new BorderLayout());
    canvasPanel.add(canvas);
    canvasPanel.setSize(30, 40);
    canvasPanel.setVisible(true);
    // **

    frame.add(canvasPanel);
    frame.setVisible(true);

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });

    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("File");
    menuBar.add(menu);
    JMenuItem exitItem = new JMenuItem("Exit");
    exitItem.addActionListener(listener);
    menu.add(exitItem);
    frame.setJMenuBar(menuBar);
}

这根本不会修改窗口的外观。

我应该在这里做什么?我对Java GUI不太熟悉。

Update:将构造函数的参数从BorderLayout更改为FlowLayout会导致GLCanvas消失。

EN

回答 2

Stack Overflow用户

发布于 2010-10-26 01:12:18

根据Anon的回答,您确实需要更好地理解布局管理器。你的问题太开放了。

不过,如果这样做有帮助的话:

代码语言:javascript
复制
    JPanel canvasPanel = new JPanel(new BorderLayout());
    frame.add(canvasPanel, BorderLayout.CENTER);

    canvasPanel.add(canvas);


    Box leftBtnsBox = Box.createVerticalBox();
    frame.add(leftBtns, BorderLayout.WEST);

    leftBtns.add(new JButton("Button 1"));
    leftBtns.add(new JButton("Button 2"));

这段代码显式地设置了一个BordeLayout,但我认为面板(和内容窗格)的默认布局管理器是BorderLayout。这段代码将把两个按钮放在垂直排列的画布面板的左上角。因为您正在使用这些布局管理器,所以第二个代码示例的setSize没有任何效果。

票数 1
EN

Stack Overflow用户

发布于 2010-10-26 00:43:21

我建议查看布局管理器的本指南 -它将给你足够的信息,看看你应该尝试什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4019840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档