当我们调整窗口大小时,Container 中的元素如何调整?

2023-12-31

下面是一个窗口的代码,当用户单击一个按钮时,该窗口会更改颜色,并在单击另一个按钮时更改标签的文本。

它有两个按钮、一个用于保存按钮的面板、一个标签和一个用于图形的面板。

概念解释: 首先,我添加了label to the North的一部分frame使用默认值BorderLayout。然后我添加了两个buttons在一个单独的面板中,我添加了panel to the South主要的一部分frame。然后我添加了panel对于图形中的Center主要的frame.

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
class GuiAnimation extends JFrame
{

JButton colorBut;
JButton labelBut;
JLabel label;
PaintCanvas firstCanvas;
JPanel buttonPanel;

GuiAnimation()
{

    colorBut = new JButton("Color Change");
    labelBut = new JButton("Text Change");
    label = new JLabel("I will change");
    firstCanvas = new PaintCanvas();
    buttonPanel = new JPanel();
    addListener(); //May be i should make different method for different component for the flexibility.But here program is small.
    addEverything();
}

private void addListener()
{

    colorBut.addActionListener(new ColorListener());
    labelBut.addActionListener(new LabelListener());
}

private void setButtonInPanel()
{
    int pad = 80;
    buttonPanel.setLayout(new FlowLayout(FlowLayout.LEADING, pad, 20));
    buttonPanel.add(colorBut);
    buttonPanel.add(labelBut);
}
void addEverything()    //Here things are done with Layouts.
{
    //add the label to the top of the window.
    this.getContentPane().add(BorderLayout.NORTH, label);
    //add button inside the panel.  
    setButtonInPanel();
    //add that panel that has button to the frame.
    this.getContentPane().add(BorderLayout.SOUTH, buttonPanel);
    //add the graphics canvas to the frame.
    this.getContentPane().add(BorderLayout.CENTER, firstCanvas);
}

class PaintCanvas extends JPanel
{

    public void paintComponent(Graphics g)
    {
        int red = (int) (Math.random() * 255);
        int green = (int) (Math.random() * 255);
        int blue = (int) (Math.random() * 255);

        Color randomColor = new Color(red, green, blue);

        g.setColor(randomColor);
        g.fillRect(0, 0, getWidth(), getHeight());
    }

}

class ColorListener implements ActionListener
{

    public void actionPerformed(ActionEvent e){

        firstCanvas.repaint();
    }
}

class LabelListener implements ActionListener
{

    public void actionPerformed(ActionEvent e){

        if ( label.getText().equals("I will change"))
            label.setText("yes yes yes clicked");
        else 
            label.setText("I will change");
    }
}

 public static void main(String[] args) {

    GuiAnimation gui = new GuiAnimation();
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gui.setSize(500,600);
    gui.setVisible(true);
 }
}

这是上面代码的输出。到目前为止一切顺利。

但是当我开始从右侧滑动时,会发生以下情况:

现在窗口的右墙正在向左移动,但按钮是静止的。继续这样我们得到:

但是,如果我们从左侧调整大小,我们会得到:

这里按钮似乎与框架一起向右移动(保持与框架边界的距离)。这与前面的情况相反。但为什么?如何?

最后,我们有:

继续下去,“ColorChange”按钮也变得部分不可见。

如果我们从右向左滑动与从左向右滑动,为什么会发生这两种不同的情况?

我已经搜索过,但无法找到准确的答案,所以最后我在这里问:为什么和如何?


你已经解释了问题,但没有解释要求。

也许你应该考虑盒子布局 http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html

panel.add( Box.createHorizontalGlue() );
panel.add( button1 );
panel.add( Box.createHorizontalStrut(20) );
panel.add( button2 );
panel.add( Box.createHorizontalGlue() );

这将创建一个面板,其中按钮保持居中,两个按钮之间有 20 像素的间隙。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我们调整窗口大小时,Container 中的元素如何调整? 的相关文章

随机推荐

  • malloc()/free() 的对齐限制

    较旧的 K R 第二版 和我读过的其他 C 语言文本讨论了动态内存分配器的实现 其风格为malloc and free 通常还会顺便提及一些有关数据类型对齐限制的内容 显然 某些计算机硬件架构 CPU 寄存器和内存访问 限制了存储和寻址某些
  • 如何通过 Chrome 内容脚本下载文件?

    This 所以答案 https stackoverflow com a 24162238 1830334详细介绍了如何通过 Chrome 扩展程序下载文件 但我使用的是内容脚本 对 Chrome API 的访问受到限制 https deve
  • 使用 C# 删除项目时自动计算列表视图中项目的总价值

    我使用列表视图作为购物车 我需要知道当我删除商品时如何重新计算购物车的总价值 这是我添加到列表视图的代码 private void btnACart Click object sender EventArgs e int value 0 f
  • 从日期时间转换为 INT

    在我的 SSIS 包中 我必须将值从 DateTime 转换为相应的 INTEGER 值 已提供以下示例 关于如何转换这些有什么想法吗 DATETIME INT 1 1 2009 39814 2 1 2009 39845 3 1 2009
  • Visual Studio Community 2015 中的空白应用程序 (XAML) 等效项

    我正在阅读 Head First C 第 3 版 文本 其中包含特定于 VS 2012 的说明 但在 VS Community 2015 中找不到等效内容 文本显示使用 Windows Store gt Blank App XAML 开始一
  • 如何使用 Cython 将 python 函数作为参数传递给 c++ 函数

    这是我的设置 我有下一个要包装的 C 类 Foo h class Foo public typedef int MyType typedef int ArgType1 typedef int ArgType2 typedef MyType
  • Symfony2 Doctrine2 与两个拥有方和 Doctrine 命令行工具的多对多关系

    在我的 Symdony2 项目中 我有两个相关实体 Service 和 ServiceGroup 这应该是多对多关系 因为每个组可以有多个服务 每个服务可以属于多个组 此外 我需要一个用户界面来管理服务和组 因此 在编辑服务时 用户应该能够
  • 无法上传应用程序 - “上传到 itunes 商店时发生错误”

    我正在尝试将我的应用程序上传到商店 这不是第一次 所以我对这个过程很熟悉 我已尝试通过管理器 首选方法 和应用程序加载器进行尝试 但两者都提供了模糊的错误消息 我最近更新到 Xcode 4 试图修复它 我的存档项目验证一切正常 但在点击提交
  • for 循环没有按预期工作

    程序将询问用户该物品的代码 然后程序会将物品的状态更改为不可用 代码工作正常 它改变了状态 但 else 内的代码仍在运行 并且找不到打印项目 这是代码 public void stopSellingItem boolean invalid
  • XML 模式;有效属性值列表中的多个

    我对使用 XML 模式相当陌生 所以如果这比我自己认为的更微不足道 请原谅我的无能 我正在尝试创建一个必需属性 该属性必须包含列表中的 1 个或多个以空格分隔的字符串值 列表为4种典型的HTTP请求方式 get post put and d
  • 输入迭代器跳过空格,任何方法可以防止这种跳过

    我正在从文件读入字符串 直到到达分隔字符 美元符号 但输入迭代器会跳过空格 因此创建的字符串没有空格 在这种情况下不是我想要的 有什么办法可以阻止跳过行为吗 如果是这样怎么办 这是我的测试代码 include
  • 如何在 Nuxt 路由器中手动生成带有 .htaccess 404 页面回退的页面

    我正在尝试使用 Nuxt js 创建一个 SSG 网站 当我访问 nuxt config js 的生成属性中未设置的路由时 我想在不更改URL的情况下显示404页面的内容 使用htaccess 以下是正在建设中的现场 http we are
  • JasperReports 中的交叉表排序

    我在交叉表中有一个列组 它是一个字符串 它使用字段SectionName 还有一个领域 SectionID 整数 我想要排序的依据 I put F SectionID in the Sort By Expression但我收到错误 1 未找
  • Python 中的逆字典

    我正在尝试使用现有字典的值列表作为单独的键来创建一个新的字典 例如 dict1 dict a 1 2 3 b 1 2 3 4 c 1 2 我想获得 dict2 dict 1 a b c 2 a b c 3 a b 4 b 到目前为止 我还无
  • 如何生成符号信息以与 Linux 版本的英特尔 VTune Amplifier 一起使用?

    我正在使用英特尔 VTune Amplifier XE 2011 来分析我的程序的性能 我希望能够在分析结果中查看源代码 文档说我需要提供符号信息 不幸的是 它没有说明在编译我的程序时如何生成该符号信息 在 VTune 的 Windows
  • 如何访问 Android 中帐户验证器中设置的首选项

    我需要获取 CheckBoxPreference 和 SwitchPreference 的值 在 account preferences xml 我有
  • 正则表达式查找引号之间的值

    我有一个正则表达式来查找引号之间的值 1 1 这工作得很好 但是 如果引号之间有双引号 那么它会失败并也会将它们分开 例如 value1 value2 value with is here value4 我需要像这样的输出 value1 v
  • Zend Framework 2 中服务中的实体管理器

    我为我的模块编写了自定义服务 该服务提供公共静态函数来验证给定的令牌 现在我想实现另一个公共静态函数来检查 Doctrine Entity 是否存在 对于这种情况 我需要服务中的对象管理器或服务定位器 class ApiService co
  • 将 .pdf 文件更改为 .png Mac OS 10.3 的 shell 脚本

    我想在 Mac OS 10 3 上制作一个脚本 将 pdf 转换为 png 我一直在环顾四周 但不确定是否可能 我一直在阅读有关 sips 命令的内容 但它似乎在 10 3 上不可用 或者至少在这个版本上不可用 我在终端输入 man sip
  • 当我们调整窗口大小时,Container 中的元素如何调整?

    下面是一个窗口的代码 当用户单击一个按钮时 该窗口会更改颜色 并在单击另一个按钮时更改标签的文本 它有两个按钮 一个用于保存按钮的面板 一个标签和一个用于图形的面板 概念解释 首先 我添加了label to the North的一部分fra