急!!怎么样在jpanel中添加背景图片,而又不会把在jpanel中的按钮覆盖?就是怎么样把图片相设制在最低层 15
1个回答
2010-06-02
展开全部
重写JPanel的paintComponent方法
简单类方法如下:
package src;
import java.awt.*;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MyPanel extends JPanel{
private Image image = null;
public MyPanel(Image image) {
this.image = image;
}
//固定背景图片,允许这个JPanel可以在图片上添加其他组件
protected void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
}
}
测试JFrame
package src;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test extends JFrame{
JPanel jpanel;
JLabel jlabel;
JButton jbutton;
Image image=new ImageIcon("image/a.jpg").getImage();
ImageIcon labIma=new ImageIcon("image/a.jpg");
Test(){
this.setIconImage(image);
this.setTitle("hello");
init();
this.add(jpanel);
}
public void init(){//本方法里面有三种显示图片的方法,两个实现了在图片上添加按钮的功能
/*第一种方法 通过JLabel简单的设置图片
jpanel=new JPanel();
jlabel=new JLabel();
jlabel.setIcon(labIma);
jpanel.add(jlabel);
*/
/*第二种方法 这是实现在JLabel添加图片同时在上面添加按钮功能,注意它里面的jpanel不用显示的添加到JFrame中,因此上面构造函数中的this.add(jpanel)要注释掉
jpanel = (JPanel) this.getContentPane(); //从JFrame 里面创建一个JPanel
jpanel.setOpaque(false); //JPanel 透明模式
jlabel = new JLabel(labIma); //创建个带背景图片的JLabel
this.getLayeredPane().add(jlabel, new Integer(Integer.MIN_VALUE));
jlabel.setBounds(0, 0, labIma.getIconWidth(), labIma.getIconHeight());
jpanel.setLayout(new FlowLayout());
JButton jb = new JButton("我是按钮");
jpanel.add(jb);
*/
/*第三种方法 通过重写JPanel中的paintComponent方法设置背景图片,然后在jpanel上添加组件
//通过背景图片设置图片 注意MyPanel是自己定义的一个类
jpanel=new MyPanel(image);
jbutton=new JButton();
jbutton.setText("haha");
jpanel.add(jbutton);
*/
}
public static void main(String args[])
{
Test t=new Test();
t.setSize(400,400);
t.setVisible(true);
}
}
简单类方法如下:
package src;
import java.awt.*;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MyPanel extends JPanel{
private Image image = null;
public MyPanel(Image image) {
this.image = image;
}
//固定背景图片,允许这个JPanel可以在图片上添加其他组件
protected void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
}
}
测试JFrame
package src;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test extends JFrame{
JPanel jpanel;
JLabel jlabel;
JButton jbutton;
Image image=new ImageIcon("image/a.jpg").getImage();
ImageIcon labIma=new ImageIcon("image/a.jpg");
Test(){
this.setIconImage(image);
this.setTitle("hello");
init();
this.add(jpanel);
}
public void init(){//本方法里面有三种显示图片的方法,两个实现了在图片上添加按钮的功能
/*第一种方法 通过JLabel简单的设置图片
jpanel=new JPanel();
jlabel=new JLabel();
jlabel.setIcon(labIma);
jpanel.add(jlabel);
*/
/*第二种方法 这是实现在JLabel添加图片同时在上面添加按钮功能,注意它里面的jpanel不用显示的添加到JFrame中,因此上面构造函数中的this.add(jpanel)要注释掉
jpanel = (JPanel) this.getContentPane(); //从JFrame 里面创建一个JPanel
jpanel.setOpaque(false); //JPanel 透明模式
jlabel = new JLabel(labIma); //创建个带背景图片的JLabel
this.getLayeredPane().add(jlabel, new Integer(Integer.MIN_VALUE));
jlabel.setBounds(0, 0, labIma.getIconWidth(), labIma.getIconHeight());
jpanel.setLayout(new FlowLayout());
JButton jb = new JButton("我是按钮");
jpanel.add(jb);
*/
/*第三种方法 通过重写JPanel中的paintComponent方法设置背景图片,然后在jpanel上添加组件
//通过背景图片设置图片 注意MyPanel是自己定义的一个类
jpanel=new MyPanel(image);
jbutton=new JButton();
jbutton.setText("haha");
jpanel.add(jbutton);
*/
}
public static void main(String args[])
{
Test t=new Test();
t.setSize(400,400);
t.setVisible(true);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询