在java中如何在一张图片上添加按钮控件?

时间:2023-01-11 19:31:56
我在java界面窗口加入了一张图片,想在该图片上增加几个按钮,可是一加就把图片覆盖了,请问哪位高手有什么好的办法?

19 个解决方案

#1


你是想把这个图片当做按钮还是想在图片上面添加按钮?没太明白你的意思!
如果是直接把图片当做按钮直接在图片上添加onClick事件就行了!

#2


ImagePanel imagePanel = new ImagePanel(图片路径);
ImagePanel和一般的Panel一样,用add()方法加按钮就行了

#3


引用 2 楼 zx_ares 的回复:
ImagePanel imagePanel = new ImagePanel(图片路径);
 ImagePanel和一般的Panel一样,用add()方法加按钮就行了

正解

#4


引用 2 楼 zx_ares 的回复:
ImagePanel imagePanel = new ImagePanel(图片路径);
ImagePanel和一般的Panel一样,用add()方法加按钮就行了


没这个类吧!!
应该是自己写的!!
我觉得其实就是  在Jpanel 上导入图片作为组件背景!!!当然需要自定义JPanel的一个子类
然后可以添加按钮。。。。

#5


是这样的效果吗??


import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class ImagePanel 
{



public static void main(String[] args) 
{


new ImagePanelFrame();

}

}
class  ImagePanelFrame extends JFrame
{

private static final long serialVersionUID = 1L;

public ImagePanelFrame()
{

setSize(400,400);
setLocation(400,200);
JButton bt=new JButton("测试按钮");
ImagePanel panel=new ImagePanel(new File("背景.jpg"));
panel.add(bt);
add(panel);
setVisible(true);

}
class ImagePanel extends JPanel
{
Image image;
private static final long serialVersionUID = 1L;

public ImagePanel(File file)
{
try 
{
 image=ImageIO.read(file);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void paint(Graphics g)
{
g.drawImage(image,0,0,null);
}
}
}

#6


不行啊 

#7


也不知道,来学习

#8


引用 2 楼 zx_ares 的回复:
ImagePanel imagePanel = new ImagePanel(图片路径);
ImagePanel和一般的Panel一样,用add()方法加按钮就行了


真有这个?  试一下!!

#9


引用 5 楼 lz12366007 的回复:
是这样的效果吗??

Java codeimport java.awt.Graphics;import java.awt.Image;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;publicclass ImagePanel 
{publicstaticvoid main(String[] args) 
    {new ImagePanelFrame();

    }

}class  ImagePanelFrameextends JFrame
{privatestaticfinallong serialVersionUID=1L;public ImagePanelFrame()
    {

        setSize(400,400);
        setLocation(400,200);
        JButton bt=new JButton("测试按钮");
        ImagePanel panel=new ImagePanel(new File("背景.jpg"));
        panel.add(bt);
        add(panel);
        setVisible(true);
        
    }class ImagePanelextends JPanel
    {
        Image image;privatestaticfinallong serialVersionUID=1L;public ImagePanel(File file)
        {try 
            {
                 image=ImageIO.read(file);
                
            }catch (IOException e) {// TODO Auto-generated catch block                e.printStackTrace();
            }
        }publicvoid paint(Graphics g)
        {
            g.drawImage(image,0,0,null);
        }
    }
}


是的,真是太感谢了

#10


学习

#11


自己写一个类ImagePanel 继承Panel可以实现这个功能.

#12


受教了!谢谢!

#13


ContentPane,GlassPane,GlassPane,LayeredPane这几个弄明白了就不难了,不同Component是添加在不同的层上的

#14


学习一下,顶

#15


使劲学

#16


   可以像下面这样做,可以实现,呵呵!
    

     public class Login extends JFrame {

public Login() {

JPanel bg = new JPanel() {

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Image image = null;
try {
image = ImageIO.read(this.getClass().getResource(
"login.jpg"));
} catch (IOException e) {

e.printStackTrace();
}
g.drawImage(image, 0, 0, null);

}

};

JLayeredPane layer = this.getLayeredPane();
layer.setLayout(null);
bg.setBounds(0, 0, 300, 300);
bg.setOpaque(true);
layer.add(bg, new Integer(100));
JButton b = new JButton("提交");
b.setBounds(new Rectangle(20, 20, 100, 100));
b.setOpaque(true);
layer.add(b, new Integer(300));
b.setVisible(true);

setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public static void main(String[] args) {
new Login();
}

}

    

#17


你试着在panle(1)上嵌套一个和button一样大的panle(2)再把Button加入panle(2)上面试试

#18


你试试  add(label,-1)  //label上放上图片,而后将图片放到底层
再将add(button,0)//再把按钮放在上去就行了

#19


为什么不用paintcomponents呢?
遇到跟你一样的情况
重载了paint
public void paint(Graphics g){
g.drawImage(i, 0, 0, 800, 640, null);
super.paintComponents(g);
}

#1


你是想把这个图片当做按钮还是想在图片上面添加按钮?没太明白你的意思!
如果是直接把图片当做按钮直接在图片上添加onClick事件就行了!

#2


ImagePanel imagePanel = new ImagePanel(图片路径);
ImagePanel和一般的Panel一样,用add()方法加按钮就行了

#3


引用 2 楼 zx_ares 的回复:
ImagePanel imagePanel = new ImagePanel(图片路径);
 ImagePanel和一般的Panel一样,用add()方法加按钮就行了

正解

#4


引用 2 楼 zx_ares 的回复:
ImagePanel imagePanel = new ImagePanel(图片路径);
ImagePanel和一般的Panel一样,用add()方法加按钮就行了


没这个类吧!!
应该是自己写的!!
我觉得其实就是  在Jpanel 上导入图片作为组件背景!!!当然需要自定义JPanel的一个子类
然后可以添加按钮。。。。

#5


是这样的效果吗??


import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class ImagePanel 
{



public static void main(String[] args) 
{


new ImagePanelFrame();

}

}
class  ImagePanelFrame extends JFrame
{

private static final long serialVersionUID = 1L;

public ImagePanelFrame()
{

setSize(400,400);
setLocation(400,200);
JButton bt=new JButton("测试按钮");
ImagePanel panel=new ImagePanel(new File("背景.jpg"));
panel.add(bt);
add(panel);
setVisible(true);

}
class ImagePanel extends JPanel
{
Image image;
private static final long serialVersionUID = 1L;

public ImagePanel(File file)
{
try 
{
 image=ImageIO.read(file);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void paint(Graphics g)
{
g.drawImage(image,0,0,null);
}
}
}

#6


不行啊 

#7


也不知道,来学习

#8


引用 2 楼 zx_ares 的回复:
ImagePanel imagePanel = new ImagePanel(图片路径);
ImagePanel和一般的Panel一样,用add()方法加按钮就行了


真有这个?  试一下!!

#9


引用 5 楼 lz12366007 的回复:
是这样的效果吗??

Java codeimport java.awt.Graphics;import java.awt.Image;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;publicclass ImagePanel 
{publicstaticvoid main(String[] args) 
    {new ImagePanelFrame();

    }

}class  ImagePanelFrameextends JFrame
{privatestaticfinallong serialVersionUID=1L;public ImagePanelFrame()
    {

        setSize(400,400);
        setLocation(400,200);
        JButton bt=new JButton("测试按钮");
        ImagePanel panel=new ImagePanel(new File("背景.jpg"));
        panel.add(bt);
        add(panel);
        setVisible(true);
        
    }class ImagePanelextends JPanel
    {
        Image image;privatestaticfinallong serialVersionUID=1L;public ImagePanel(File file)
        {try 
            {
                 image=ImageIO.read(file);
                
            }catch (IOException e) {// TODO Auto-generated catch block                e.printStackTrace();
            }
        }publicvoid paint(Graphics g)
        {
            g.drawImage(image,0,0,null);
        }
    }
}


是的,真是太感谢了

#10


学习

#11


自己写一个类ImagePanel 继承Panel可以实现这个功能.

#12


受教了!谢谢!

#13


ContentPane,GlassPane,GlassPane,LayeredPane这几个弄明白了就不难了,不同Component是添加在不同的层上的

#14


学习一下,顶

#15


使劲学

#16


   可以像下面这样做,可以实现,呵呵!
    

     public class Login extends JFrame {

public Login() {

JPanel bg = new JPanel() {

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Image image = null;
try {
image = ImageIO.read(this.getClass().getResource(
"login.jpg"));
} catch (IOException e) {

e.printStackTrace();
}
g.drawImage(image, 0, 0, null);

}

};

JLayeredPane layer = this.getLayeredPane();
layer.setLayout(null);
bg.setBounds(0, 0, 300, 300);
bg.setOpaque(true);
layer.add(bg, new Integer(100));
JButton b = new JButton("提交");
b.setBounds(new Rectangle(20, 20, 100, 100));
b.setOpaque(true);
layer.add(b, new Integer(300));
b.setVisible(true);

setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public static void main(String[] args) {
new Login();
}

}

    

#17


你试着在panle(1)上嵌套一个和button一样大的panle(2)再把Button加入panle(2)上面试试

#18


你试试  add(label,-1)  //label上放上图片,而后将图片放到底层
再将add(button,0)//再把按钮放在上去就行了

#19


为什么不用paintcomponents呢?
遇到跟你一样的情况
重载了paint
public void paint(Graphics g){
g.drawImage(i, 0, 0, 800, 640, null);
super.paintComponents(g);
}

#20