【问题标题】:Resizing the components in a desktop GUI在桌面 GUI 中调整组件的大小
【发布时间】:2012-06-17 15:23:10
【问题描述】:

我正在为 Java 中的数据结构制作 GUI。我想要一个功能,每当用户单击表单顶部的最大化按钮时,组件和表单中的所有内容也应该随着窗口的展开而调整大小,反之亦然。我搜索了很多,但找不到解决方案。

如何缩放 GUI?

【问题讨论】:

  • 我已经为 GUI 编写了“堆栈”代码
  • 通常最好不要缩放每个组件,而是为特定组件提供额外的宽度或高度。 Nested Layout Example 就是这样做的——调整它的大小以了解我的意思。在这种情况下,它实际上归结为用于在 GUI 中定位组件的布局管理器,以及添加它们时使用的约束。
  • 没有得到任何嵌套布局示例正在执行的操作。你能帮我写一些简短的代码吗,比如按下最大化按钮时如何调整工具栏的大小
  • rick 复制代码并运行,然后调整窗口大小,然后说您是否需要这种调整大小?您将看到 gridbaglayout 位和表格都调整大小以适应具有适当纵横比的可用空间。 @AndrewThompson “嵌套布局示例......”我认为这回答了 OP 的问题,不是吗?因此,它也可能是一个答案而不是评论(无论如何+1)。

标签: java swing user-interface awt layout-manager


【解决方案1】:

你能帮我写一些简短的代码吗,比如按下最大化按钮时如何调整工具栏的大小..

我会做得更好。这是一个简短的代码示例,其中显示 5 个具有不同的调整大小行为,具体取决于它们在 BorderLayout 中的位置。

import java.awt.BorderLayout;
import javax.swing.*;

public class ResizableToolBars {

    public static void showFrameWithToolBar(String toolBarPosition) {
        // the layout is important..
        JPanel gui = new JPanel(new BorderLayout());

        JToolBar tb = new JToolBar();
        // ..the constraint is also important
        gui.add(tb, toolBarPosition);
        tb.add(new JButton("Button 1"));
        tb.add(new JButton("Button 2"));
        tb.addSeparator();
        tb.add(new JButton("Button 3"));
        tb.add(new JCheckBox("Check 1", true));

        JFrame f = new JFrame(toolBarPosition + " Sreeeetchable Tool Bar");
        f.setContentPane(gui);
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setLocationByPlatform(true);
        f.pack();

        // we don't normally set a size, this is to show where 
        // extra space is assigned.
        f.setSize(400,120);
        f.setVisible(true);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                showFrameWithToolBar(BorderLayout.PAGE_START);
                showFrameWithToolBar(BorderLayout.PAGE_END);
                showFrameWithToolBar(BorderLayout.LINE_START);
                showFrameWithToolBar(BorderLayout.LINE_END);
                showFrameWithToolBar(BorderLayout.CENTER);
            }
        });
    }
}

如果您在那之后回到Nested Layout Example,您应该能够弄清楚我是如何将较小的组件组​​组合在一起的,每个组件在父容器的一个区域中都有自己的布局(在面板中) .

【讨论】:

  • @mKorbel 谢谢 - 我正在寻找一种方法将 6 个 GUI 的屏幕截图塞进一个答案中(而不是被唤醒)。 ;)
  • 房间里有人有太多时间来创建屏幕截图。而且我一直在投票引用该嵌套布局答案的帖子(也许我应该尝试将其添加到 SO 上的 Swing wiki 标记中):-)
  • +1 contributingfray 有罪。
  • @Robin “制作截图的时间太长了” 这比编织篮子更平静。我的医生说没关系,但护理人员更喜欢卖篮子.. ;)
  • 我在 Swing 标签中添加了一个部分。让我们看看它是否获得批准
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多