IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java gui-让动画(paint)和界面(conponent)同时显示的妙招,聊聊Panel和BorderLayout隐藏用法 -> 正文阅读

[Java知识库]java gui-让动画(paint)和界面(conponent)同时显示的妙招,聊聊Panel和BorderLayout隐藏用法

前言

在学习java的图形界面开发时,我们时常会遇到这样的情况。
就是利用paint做好了一个动画后,如果我们想要直接在动画的界面上加上一些组件(component)来丰富界面,会发现这些直接加上的组件难以正常显示,如下图:
这里我加入了一个按钮,但是没有显示
没有显示的原因其实很容易猜到,出现的时间太短或者还没出现就被我们动画程序给清除了,导致我们没有看到。也可以理解为是我们的程序在repaint()小球动画的同时,也把我们的按钮给影响到了。

或许会有人想到将Button放在一块新的板子(Panel)上,然后将这块Panel和动画所在Panel加在Frame里。但是实际上,同一时间java只能显示一块板子的内容,因此无法通过这种方法来做到同时显示两块Panel的内容,最后的结果如下:
没能显示动画,只显示出了按钮
然而,如何才能既显示出像按钮这样的组件(component),又能显示出动画呢?

这就不得不提到我们今天的主角,BorderLayout 了。

具体原理

方法其实很简单,众所周知,每个组件都有一个setBounds方法,用于调整组件位置和大小。但是这个方法只能在set布局为null的情况下使用,否则不起作用。

而BorderLayout的特殊性就在于,你在布局为BorderLayout的板子(Panel)上加入了一块有图像、动画的panel后,你的其他组件就可以使用setBounds来调整位置了了。

特别注意的是,Frame的默认布局就是BorderLayout。

这样一来,在动画panel里设置的repaint()和清除函数,就不会再影响我们的其他按钮之类组件(component)了。

这样一来,效果就如下图:
既有动画又有组件的界面
简化版的参考代码如下(主要是理解思路,代码只是助于理解的):

JButton jButton1=new JButton("Starts");
//定义组件
        jButton1.setBounds(100,300,130,40);
        JButton jButton2=new JButton("Start");
        jButton2.setBounds(600,300,130,40);
        JPanel p2=new JPanel();
       

        JPanel p1=new JPanel(){   //在p1上绘制背景和小球
            public void paint(Graphics g) {
                g.setColor(Color.getHSBColor(10,15,20));
                Image img;
                img=getToolkit().getImage("C:\\Users\\xxx\\Desktop\\壁纸库\\1.jpg");
                img.getScaledInstance(1280,720,Image.SCALE_FAST);
                g.drawImage(img,0,0,1280,720,this);
                g.fillOval(0+x, 0+y, 30, 30);//这里的x、y是和动画部分有关的,可以忽略

            }
        };

        this.add(p2);
        p2.setLayout(new BorderLayout());//设置布局为BorderLayout
        p2.add(jButton1);
        p2.add(jButton2);
        p2.add(p1);
        setVisible(true);
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:00:25  更:2021-12-26 22:03:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:56:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码