下面是窗口的代码,当用户单击按钮时,窗口会更改颜色,并在单击其他按钮时更改标签的文本.

它有两个按钮,一个用于按住按钮的面板,一个标签和一个用于图形的面板.

概念解释:

首先,我使用默认的BorderLayout将标签添加到框架的北部.然后我在一个单独的面板中添加了两个按钮,然后我将该面板添加到主框架的南部.然后我在主框架的中心添加了图形面板.

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”按钮也变得部分不可见.

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

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

解决方法:

您已解释了该问题,但您尚未解释该要求.

panel.add( Box.createHorizontalGlue() );

panel.add( button1 );

panel.add( Box.createHorizontalStrut(20) );

panel.add( button2 );

panel.add( Box.createHorizontalGlue() );

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

标签:java,window,swing,frame,panel

来源: https://codeday.me/bug/20190528/1169617.html

java按钮改变窗口大小_java – 当我们调整窗口大小时,Container中的元素如何调整?...相关推荐

  1. java按钮改变窗口大小_布局似乎有问题,JButton在调整窗口大小时显示出意外的行为。...

    很好的例子的问题可能与平台有关,但我可以提供一些观察:您没有添加或删除组件,所以您不需要revalidate(). 由于背景色是按钮的绑定属性,因此不需要后续调用repaint(). 你,你们做需要r ...

  2. java 改变窗口大小_java 如何让程序窗口随屏幕大小改变

    这个问题一直困扰我很长时间了,虽然工作了一段时间,但感觉连这个问题都解决不好的话,实在对不起自己.今天我终于抽出时间,好好网上找了下资料,然后写了个简单的记事本程序,感觉是我想要的结果.所以在这里把程 ...

  3. Java迭代器修改链表_Java恼人的迭代器不会返回链表中的元素

    给出以下代码: public void insertIntoQueue(float length,int xElement,int yElement,int whichElement) { Dot d ...

  4. LabVIEW学习笔记十三:窗格详解(调整窗格大小时缩放特定对象)

    软件里对于窗格的说明和对于分割栏的说明是放在一起的,因为两者本来就联系紧密,窗格就是用分割栏构成的. 配置窗格 右键单击窗格中的滚动条并选择需配置的窗格,从下列快捷菜单项中选择以配置窗格. 显示项-为 ...

  5. java鼠标改变窗口大小监听事件_java – 当用户拖动鼠标时,监听JFrame调整事件大小?...

    当用户单击JFrame的角落来调整大小并拖动鼠标时,JFrame会根据用户拖动时鼠标的当前位置重绘.你怎么听这些事件? 下面是我目前尝试的: public final class TestFrame ...

  6. mysql修改表编码为ytf8_如何修复“TypeError:x和y必须具有相同的数据类型,got”tf.uint8型!= tf.float32型“当我试图以十为单位调整图像大小时...

    我试着建立一个图像管道,为Tensorflow构建一个图像数据集来裁剪图像,但是我无法裁剪图片. 我遵循了这个tutorial但是我想将文件裁剪成正方形,并且在不保留纵横比的情况下不调整其大小. 这是 ...

  7. java应用窗口大小_java 如何让程序窗口随屏幕大小改变 | 学步园

    这个问题一直困扰我很长时间了,虽然工作了一段时间,但感觉连这个问题都解决不好的话,实在对不起自己.今天我终于抽出时间,好好网上找了下资料,然后写了个简单的记事本程序,感觉是我想要的结果.所以在这里把程 ...

  8. java 按钮不显示_JAVA图形界面,按钮为什么显示不出来?

    JAVA图形界面,按钮为什么显示不出来? 来源:互联网  宽屏版  评论 2009-10-22 02:51:03 分类: 电脑/网络 >> 软件 问题描述: import javax.sw ...

  9. java 按钮设置图片_Java中如何设置带图片按钮的大小

    在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题, 按照方法:JButton jb1 = new JButton(); jb1.setBo ...

最新文章

  1. 2021年大数据Hive(二):Hive的三种安装模式和MySQL搭配使用
  2. ansible使用教程(4W字长文,保姆级别教程,建议收藏)
  3. 学编导还是学计算机,高二学编导烧钱吗
  4. laravel框架——composer导入laravel
  5. qt获取QString中第一个汉字
  6. 【转载】android客服端+eps8266+单片机+路由器之远程控制系统
  7. 容器编排技术 -- Kubernetes Replication Controller
  8. 以线虫为模型模拟的神经网络,让机器人无需训练即可自动避开障碍物
  9. 登录的时候 实现记住密码
  10. 各种芯片复位电路分析
  11. 让你的应用完美适配平板
  12. 一招解决A卡下载安卓模拟器问题
  13. uboot的常用环境变量(bootdelay、ipaddr、serverip、gatewayip、netmask、ethaddr、bootcmd、bootargs)
  14. ***虚拟专用网技术
  15. 【C语言】文件操作详解
  16. 准入控制_Kubernetes动态准入控制示例
  17. 企业微信自建应用通过PHP进行收发消息
  18. 概率论—贝叶斯定理 解析
  19. 材料专业就业方向有哪些,材料人就业工作?
  20. EasyPoi快速入门

热门文章

  1. Python调用Windows API函数编写录音机和音乐播放器
  2. ProjectEuler 5
  3. Django的get和post请求处理
  4. ExtJs2.0学习系列(10)--Ext.TabPanel之第二式
  5. pytorch实现LeNet5
  6. C++中序列化对象并存储到mysql
  7. TensorFlow第六步: 继续挖坑 用tf重写BP并增加SGD
  8. Matlab--存储和加载.mat文件形式的数据
  9. 21南阳理工oj新生赛Round#5--这是一道二分题
  10. 全国计算机一级msoffice考试内容,2015年全国计算机一级MSOffice考试大纲