首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java :如何在网格布局中更改一行的大小,并允许它只在水平而不是垂直方向动态调整大小?

Java :如何在网格布局中更改一行的大小,并允许它只在水平而不是垂直方向动态调整大小?
EN

Stack Overflow用户
提问于 2012-09-26 14:55:18
回答 2查看 28.4K关注 0票数 7

大家好,我有一个JFrame,里面有三个组件。

  1. 菜单
  2. 有标签的窗格
  3. 有一些按钮的面板

最初,我的目标是创建如下所示的设计:

当用户调整应用程序的大小时,所有的东西都会被调整大小。因此,我想,如果我使用一个简单的网格布局,我的问题就会得到解决,所以我决定做以下工作:

  1. 选项卡式窗格中将有一些面板,这些面板将遵循网格布局。
  2. 底部的小组将遵循网格布局。
  3. JFrame也将遵循网格布局。

结果:

正如您所看到的,这不是我想要的,这些按钮太大了,尽管应用程序的大小很好:

这些按钮也会调整大小,但它们仍然太大。我希望能够为按钮设置一个较小的大小(更具体地说,它们包含在其中的面板),当用户调整应用程序的大小时,按钮将只调整水平大小,而不是垂直调整大小,这意味着只有选项卡式窗格才会垂直地变大。这能实现吗?我搜索并发现了关于网格布局,我开始玩一点点,但我没有取得任何成果。我所做的就是:

看起来不错,但当我调整尺寸时,我得到的是:

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 14:58:18

我将使用BorderLayout作为内容窗格。使用BorderLayout.CENTER将选项卡式窗格放入其中,并使用BorderLayout.SOUTH在其中放置按钮面板。

票数 13
EN

Stack Overflow用户

发布于 2012-09-26 14:58:37

JFrame也将遵循网格布局。

这是你的问题。相反,使用默认的BorderLayout (因此删除将JFrame布局设置为GridLayout的调用)和

  1. 添加带有约束BorderLayout.SOUTH的按钮面板
  2. 添加没有任何约束的选项卡式窗格(这意味着约束BorderLayout.CENTER)

看看Swing LayoutManager tutorial,特别是与BorderLayout有关的示例。

小例子:

代码语言:javascript
运行
复制
import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;

public class TestLayout {

    protected void initUI() {
        final JFrame frame = new JFrame(TestLayout.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenuItem newItem = new JMenuItem("New...");
        JMenuItem open = new JMenuItem("Open...");
        fileMenu.add(newItem);
        fileMenu.add(open);
        menuBar.add(fileMenu);
        JTabbedPane tabs = new JTabbedPane();
        tabs.addTab("Tab 1", new JPanel());
        tabs.addTab("Tab 2", new JPanel());
        tabs.addTab("Tab 3", new JPanel());
        JPanel buttonPanel = new JPanel(new GridLayout());
        buttonPanel.add(new JButton("Button-1"));
        buttonPanel.add(new JButton("Button-2"));
        buttonPanel.add(new JButton("Button-3"));
        frame.add(tabs);
        frame.add(buttonPanel, BorderLayout.SOUTH);
        frame.setJMenuBar(menuBar);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestLayout().initUI();
            }
        });
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12604593

复制
相关文章

相似问题

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