java使用教程——组件及事件处理——窗口(设置窗口的颜色和背景)

用JFrame时,设置背景颜色需使用JFrame.getContentPane().setBackground(Color.red)
Container con=this.getContentPane();//得到内容窗格
con.setBackground(Color.blue);

而使用Frame时则可以直接使用setBackground(Color.red),且需要设置窗体默认关闭事件,否则运行窗口无法正常关闭。
将按钮添加到面板,再将面板添加到框架中,要通过面板来调用setBackground()方法来设置框架的背景颜色,直接使用myFrame.setBackground(Color.GREEN);是不会起作用的。原因是JFrame一旦创建,其中已包含一个内容面板,此时myFrame.setBackground无论设置成什么颜色,都将被顶层面板所覆盖。因此,要改变背景颜色,就要改变面板的背景颜色。

import javax.swing.*;
import java.awt.*;
public class win {public static void main(String args[]){JFrame window1=new JFrame("第一个窗口");JFrame window2=new JFrame("第二个窗口");Container con=window1.getContentPane();//得到内容窗格con.setBackground(Color.BLACK);window1.setBounds(60, 100, 188, 108);//等价于//window1.setSize(188,108);//window1.setLocation(60,100);window2.setBounds(260, 100, 188, 108);window1.setVisible(true);//是否可见window1.setResizable(false);//不可以调整窗口的大小window1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);window2.setVisible(true);window2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}

在这里插入图片描述
给窗口添加背景:(使用电脑上的图片设置背景)

路径的书写:
C:/Users/86156/OneDrive/图片/手机上的高清图片/你的名字.png


import java.awt.*;
import javax.swing.*;public class BgTest extends JFrame{public BgTest(){init();this.setTitle("背景图设置");this.setSize(200, 300);//设置窗体大小this.setLocation(600,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(true);this.setVisible(true);}private void init() {JLabel lbl1 = new JLabel("用户名:");//两个标签JLabel lbl2 = new JLabel("密 码:");JTextField txt = new JTextField(10);JPasswordField pasw = new JPasswordField(10);//密码输入框pasw.setEchoChar('*');JButton btn1 = new JButton("登录");JButton btn2 = new JButton("取消");ImageIcon img = new ImageIcon("C:/Users/86156/OneDrive/图片/手机上的高清图片/你的名字.png");//要设置的背景图片JLabel imgLabel = new JLabel(img);//将背景图放在标签里。this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//将背景标签添加到jfram的LayeredPane面板里。imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());// 设置背景标签的位置Container contain = this.getContentPane();((JPanel) contain).setOpaque(false); // 将内容面板设为透明。将LayeredPane面板中的背景显示出来。contain.setLayout(new FlowLayout());contain.add(lbl1);contain.add(txt);contain.add(lbl2);contain.add(pasw);contain.add(btn1);contain.add(btn2);}public static void main(String[] args) {new BgTest(); }
}

在这里插入图片描述

Image直属java.awt包,抽象类。BufferImage为image的直接子类,增加了缓冲功能。BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片,通常用来做图片修改操作如大小变换、图片变灰、设置图片透明或不透明等。加载图片到内存:
BufferedImage image = ImageIO.read(new FileInputStream(imgPath));//利用getGraphics()函数获得图形上下文作进一步操作。//Image image=imageToolkit.getDefaultToolkit().getImage(imgPath);这种方法并未将图片加载到内存,仅仅是引用。ImageIcon直属javax.swing包 
类定义:
public class ImageIcon extends Object  implements Icon, Serializable, Accessible。
imageicon与image的关系是:imageicon利用image绘制icon。不过,Image一般尺寸较大,不适合用作icon(大图片用作icon时只显示图片的一部分),需要经过处理:
ImageIcon imageIcon = new ImageIcon(new File(path));
Image image = imageIcon.getImage();                         
image = image.getScaledInstance(30,20,Image.SCALE_FAST);
ImageIcon icon = new ImageIcon(image);//利用imageicon的构造函数 public ImageIcon(Image i)

窗口的大小和图片大小一样

主要思路:
1.把图片添加到标签里(把标签的大小设为和图片大小相同),把标签放在分层面板的最底层;
2.把窗口面板设为内容面板并设为透明、流动布局。
3.之后把组件和面板添加到窗口面板就可以;
大白话翻译:
把JFrame想象成一个桌子,桌子上面有个木板,组件和面板就是木板上的物品,我们就是把桌子上的木板换为玻璃板,然后把背景图放在玻璃板下面,把物品放在玻璃板上面;

package lfs;import java.awt.FlowLayout;import javax.swing.*;public class ImageDemo {public static void main(String[] args) {JFrame jf=new JFrame("背景图片测试");//1.把图片添加到标签里(把标签的大小设为和图片大小相同),把标签放在分层面板的最底层;ImageIcon bg=new ImageIcon("C:/Users/86156/OneDrive/图片/手机上的高清图片/动漫图片.jpg");JLabel label=new JLabel(bg);label.setSize(bg.getIconWidth(),bg.getIconHeight());jf.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));//2.把窗口面板设为内容面板并设为透明、流动布局。JPanel pan=(JPanel)jf.getContentPane();pan.setOpaque(false);pan.setLayout(new FlowLayout());//3.之后把组件和面板添加到窗口面板就可以;JButton btn=new JButton("测试按钮");pan.add(btn);jf.setSize(bg.getIconWidth(),bg.getIconHeight());jf.setLocationRelativeTo(null);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setVisible(true);}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘软件开发的达摩克利斯之剑

↑ ???? 万字长文不想看,那就听一听叭 ↑为什么你的程序总是出现 bug?凭什么让改 bug 占据了你大部分的时间?看完本文,保证你能设计出更稳定的程序,摆脱 bug 的缠绕,做项目更安心!记得我在学…

java使用教程——组件及事件处理——菜单(添加图标)

菜单条JMenuBar 菜单JMenu 菜单项JMenuItem menuFruit.addSeparator(); //在菜单添加分隔线 public class Example9_2 {public static void main(String args[]) {WindowMenu winnew WindowMenu("带菜单的窗口",20,30,600,290);} }C:/Users/86156/OneDrive/图片/水…

java使用教程——组件及事件处理——常用组件与布局

常用组件: 1.JTextField(文本框) 允许用户在文本框中输入单行文本 2.JTextArea(文本区) 允许用户文本区中输入多行文本 3.JLabel(标签) 标签为用户提供信息 4.JButton(按钮) 允许用户单击按钮 5.JCheckBox(复选框) 为用户提供多种选择 6.JComboBox(下拉列表&#xf…

数据库大战,AWS又将目标瞄准了微软SQL Server

喜欢就关注我们吧!文|白开水AWS 宣布了一种新的数据库产品 — 用于 Aurora PostgreSQL 的 Babelfish。该产品旨在效仿 Microsoft 的 SQL Server,并吸引 SQL Server 用户迁移到 AWS 云平台。图片来源:techcrunchAWS 首席执行官 Andy Jassy 在 …

惊!Kubernetes 将弃用 Docker,开发者们怎么办?

喜欢就关注我们吧!文|大东BE近日,Kubernetes 官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持,届时用户将收到 Docker 弃用警告,并需要改用其他容器运行时。但 Docker 作为容器镜像构建工具的作用将不受影响&#x…

sql计算留存_SQL基础第七讲:关于用户留存率的计算

最近,好几个小伙伴都拿着关于用户留存的面试题来问我,所以今天单独开一篇文章讲一下留存问题。首先看一下留存是什么,简单来说,我和你今天在一家超市购物了,明天我来购物了,你没来,那么我就是这…

java实用教程——组件及事件处理——ActionEvent事件

事件源: 文本框,按钮,菜单项,密码框,单选按钮 注册监视器: 能够触发ActionEvent事件的组件使用方法 addActionListener(ActionListener listener) 处理事件接口: ActionListener接口中只有一个方…

【Azure Show】|第七期 特别版线上沙龙直播回顾. 嘉宾张坤段清华谭国欣柯克黄炜锵...

我是MVP 继与广州图书馆合作推出【搭上AI快车】在线公益课堂和大家分享了基于移动应用的人工智能开发经验后,本期继续与广州图书馆合作,邀请更多的微软技术专家,推出我们Azure Show节目的特别版,为大家带来各IT技术领域的经验分享…

java实用教程——组件及事件处理——ItemEvent事件(设置字体类型)

ItemEvent事件源: 选择框,下拉列表都可以触发ItemEvent事件 注册监视器: 能够触发ItemEvent事件的组件使用addItemListener(ItemListener listen) 将实现ItemListener的接口的类的实例注册为事件源的监视器 ItemListener接口: 接口…

理解 redis 中的 哈希对象类型

redis中的hash也是我们使用中的高频数据结构,它的构造基本上和编程语言中的HashTable,Dictionary大同小异,如果大家往后有什么逻辑需要用Dictionary存放的话,可以根据场景优先考虑下redis哦,起码可以装装嘛&#xff0c…

java实用教程——组件及事件处理——DocumentEvent事件

DocumentEvent事件源: 文本区Document的维护 注册监视器: 使用addDocumentListener(DocumentListener listen)为事件源添加监视器 DocumentListener接口: 接口中有三个方法: public void changUpdate(DocumentEvent e); public vo…

prometheus-net.DotNetRuntime 获取 CLR 指标原理解析

prometheus-net.DotNetRuntime 介绍Intro前面集成 Prometheus 的文章中简单提到过,prometheus-net.DotNetRuntime 可以获取到一些 CLR 的数据,比如说 GC, ThreadPool, Contention, JIT 等指标,而这些指标可以很大程度上帮助我们解决很多问题&…

错误代码1500什么意思_啊早安打工人是什么梗???

早安打工人是什么梗?最近打工人这个词成为了大家口中最为常见的一个词语,打工人的爆火也引起了很多人的关注,这样一个词语在很多人看来很有可能还有点嘲讽的含义,却突然火遍全网,究竟打工人是什么梗?看起来…

java实用教程——组件及事件处理——MouseEvent事件

MouseEvent事件 任何组件上都可以发生鼠标事件,如鼠标进入组件、退出组件、在组件上方单击鼠标、拖动鼠标等都触发鼠标事件,即导致MouseEvent类自动创建一个 事件对象,事件源注册监视器的方法是addMouseListener(MouseListener listener); …

这个世界,正在悄悄惩罚那些不注意身体的人

这是头哥侃码的第226篇原创上周四,整个网络被 “马拉多纳去世” 的消息刷屏了。虽然我从不看足球,而且没有看过马拉多纳踢球,但关于他的故事、他的传奇、他的丰功伟绩,倒是听过不少。所以在听到这个消息的时候,我感到深…

tcp拥塞控制_网络TCP的拥塞控制算法简介

作为网络中使用最广泛的传输协议,TCP的拥塞控制机制是学术界和工业界关注的焦点问题之。然而,目前广泛使用的TCP传输协议的拥塞控制算法仍然使用相对固定的窗口调节策略,无法根据动态变化的场景自适应地调整参数,从而造成不可避免…

java实用教程——组件及事件处理——对话框(消息对话框,输入对话框,确认对话框)

消息对话框:(这个对话框提供一些信息) 无模式:可多线程的执行 有模式:用户必须处理这个一个对话框。必须解决这个问题后才可以继续相处下去 对话框分为无模式和有模式两种。如果一个对话框 是有模式的对话框,那么当这个对话框处于…

11张图演进SeviceMesh服务网格

本周和大家聊聊架构进化史-大家可文末扫码加入随着互联网持续高歌猛进,相关技术名词也是层出不穷,ServiceMesh服务网格这两年尤为火爆,然而很少有讲清楚的文章。笔者这里用心整理了一篇文章,用11张图演绎ServiceMesh的进化历程&am…

java实用教程——组件及事件处理——对话框(颜色对话框,自定义对话框)

颜色对话框: 可以用javax.swing包中的JColorChooser类的静态方法 public staticColorshowDialog (Component component, String title, Color initialColor) 创建一个有模式的颜色对话框,其中参数component指定颜色对话框可见时的位置,颜色对…

.NET Core/.NET 5.0 析构函数依然有效?

【导读】最近看到小伙伴在.NET Core中用到了析构函数,不禁打一疑问,大部分情况下,即使在.NET Framework中都不会怎么用到析构函数,我想在.NET Core中是否还依然有效呢?随着时间推移,迭代版本更新&#xff0…