java中的图形界面如何在JFrame中添加背景色及背景图片 |
您所在的位置:网站首页 › wpspptsmart图形怎么添加 › java中的图形界面如何在JFrame中添加背景色及背景图片 |
Java窗口是指JFrame或者Frame
其次,窗口背景颜色是指直接调用JFrame或者Frame的setBackground(Color color)方法设置后显示出来的颜色。其实,JFrame的显示机制。在你直接调用这个方法后,你的确设置了背景颜色,而你看到的却不是直接的JFrame或者Frame,而是JFrame.getContentPane().而JFrame上的contentPane默认是Color.WHITE的,所以,无论你对JFrame或者Frame怎么设置背景颜色,你看到的都只是contentPane. 最后,讲解决办法: 办法A:在完成初始化,调用getContentPane()方法得到一个contentPane容器,然后将其设置为不可见,即setVisible(false)。这样,你就可以看到JFrame的庐山真面貌啦! 核心代码this.getContentPane().setVisible(false);//得到contentPane容器,设置为不可见 方法B:将contentPane的颜色设置为你想要的颜色,而不是对JFrame本身设置, 核心代码:this.getContentPane().setBackground(Color.red);//设置contentPane为红色 将核心代码替换方法A核心代码即可实现 方法C:为JFrame添加一个Panel或者JLabel等其他组件,设置其颜色为你想要的颜色,然后将其覆盖JFrame窗口即可
JFrame默认是BorderLayout JPanel默认是FlowLayout。
1.JFrame设置背景色,注意体会注释的那句话。 package com.tools; import java.awt.Color; import javax.swing.JFrame; public class Test extends JFrame { public static void main(String[] args) { new Test(); } public Test() { this.setSize(400,300); this.setLocation(400,300); this.setBackground(Color.blue); this.getContentPane().setBackground(Color.red); this.getContentPane().setVisible(false);//如果改为true那么就变成了红色。 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } 2.给JFrame设置背景图片。方法1:通过在JFrame中添加一个JPanel,背景图片放在JPanel上来实现。代码如下: import java.awt.*; import javax.swing.*; public class Test extends JFrame { //创建一个容器 Container ct; //创建背景面板。 BackgroundPanel bgp; //创建一个按钮,用来证明我们的确是创建了背景图片,而不是一张图片。 JButton jb; public static void main(String[] args) { new Test(); } public Test() { //不采用任何布局方式。 ct=this.getContentPane(); this.setLayout(null); //在这里随便找一张400*300的照片既可以看到测试结果。 bgp=new BackgroundPanel((new ImageIcon("images\\background.jpg")).getImage()); bgp.setBounds(0,0,400,300); ct.add(bgp); //创建按钮 jb=new JButton("测试按钮"); jb.setBounds(60,30,160,30); ct.add(jb); this.setSize(400,300); this.setLocation(400,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } class BackgroundPanel extends JPanel { Image im; public BackgroundPanel(Image im) { this.im=im; this.setOpaque(true); } //Draw the back ground. public void paintComponent(Graphics g) { super.paintComponents(g); g.drawImage(im,0,0,this.getWidth(),this.getHeight(),this); } } 方法2:我们用JLayeredPane,JLayeredPane 为 JFC/Swing 容器添加了深度,允许组件在需要时互相重叠。Integer 对象指定容器中每个组件的深度,其中编号较高的组件位于其他组件之上。常用的几个层如右图:
/** * 给JFrame 添加一个背景图案。 */ package com.swingpractise; import javax.swing.*; public class JFrameBackground4 extends JFrame { //创建一个JLayeredPane用于分层的。 JLayeredPane layeredPane; //创建一个Panel和一个Label用于存放图片,作为背景。 JPanel jp; JLabel jl; ImageIcon image; //创建一个按钮用于测试的。 JButton jb; public static void main(String[] args) { new JFrameBackground4(); } public JFrameBackground4() { layeredPane=new JLayeredPane(); image=new ImageIcon("images\\background.jpg");//随便找一张图就可以看到效果。 //创建背景的那些东西 jp=new JPanel(); jp.setBounds(0,0,image.getIconWidth(),image.getIconHeight()); jl=new JLabel(image); // jl.setBounds(0,0,image.getIconWidth(),image.getIconHeight()); jp.add(jl); //创建一个测试按钮 jb=new JButton("测试按钮"); jb.setBounds(100,100,100,100); //将jp放到最底层。 layeredPane.add(jp,JLayeredPane.DEFAULT_LAYER); //将jb放到高一层的地方 layeredPane.add(jb,JLayeredPane.MODAL_LAYER); this.setLayeredPane(layeredPane); this.setSize(image.getIconWidth(),image.getIconHeight()); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(image.getIconWidth(),image.getIconHeight()); this.setVisible(true); } } 第二个程序和三个程序的窗体
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |