java中swing界面上怎么给jpanel上添加背景图片

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中swing界面上怎么给jpanel上添加背景图片相关的知识,希望对你有一定的参考价值。

      //重写JPanel的这个方法就可以了
       @Override  
    public void paintComponent(Graphics gs)   
        Graphics2D g = (Graphics2D) gs;  
        super.paintComponent(g);  
        //画背景图片  
        Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource(imgPath));  
        g.drawImage(image, 0, 0,width,height, this);  
    

一个完整的代码:

package test;

import java.awt.Graphics;
import java.awt.Image;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

//为窗口添加背景图片
public class JFrameBackground 

private JFrame frame = new JFrame("带背景图片的JFrame");
private JPanel imagePanel;
private ImageIcon backgroundimg;

public JFrameBackground() 

imagePanel = new JPanel() 
@Override
protected void paintComponent(Graphics g) 
super.paintComponent(g);
URL location = this.getClass().getResource("grapes.gif");
backgroundimg = new ImageIcon(location);
Image img = backgroundimg.getImage();
g.drawImage(img, 0, 0, backgroundimg.getIconWidth(),
backgroundimg.getIconHeight(),
backgroundimg.getImageObserver());
frame.setSize(backgroundimg.getIconWidth(),
backgroundimg.getIconHeight());


;

frame.add(imagePanel);
frame.setVisible(true);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


public static void main(String[] args) 
new JFrameBackground();

这是运行的一个截图:

参考网址: 

http://www.linuxidc.com/Linux/2011-08/41689.htm 两种设置背景的方法

http://blog.csdn.net/one_and_only4711/article/details/6594770 动态改变背景大小

参考技术A import javax.swing.JPanel;
import java.awt.Image;
import javax.swing.ImageIcon;
import java.awt.Graphics;
class GetPanel extends JPanel
private static final long serialVersionUID = 1L;
int width = 0, hight = 0;
String imgpath = "";
public GetPanel(int width, int hight, String file)
this.width = width;
this.hight = hight;
imgpath = file;

protected void paintComponent(Graphics g)
ImageIcon icon = new ImageIcon(imgpath);
Image img = icon.getImage();
g.drawImage(img, 0, 0, width, hight, this);


GetPanel继承了JPanel,同时又加入了paintComponent()方法。
JPanel jContentPane = new GetPanel(500,375,"login.png");
这样就可以给面板加上背景图片了
参考技术B

代码在附件,你参考下


如何在此示例中添加新的jpanel?

愚蠢的问题,但我似乎无法找到答案,当我这样做不起作用。所以我想在现有的JPanel上添加新的JPanel。有时当我添加它时,它只是在我运行时打开一个新窗口,其他时候没有任何反应。无论如何这里是代码:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Main extends JFrame {

private static final long serialVersionUID = 1L;

public static void main(String[] args)
{
    new Main().setVisible(true);
}

private Main()
{
    super("Vending machine");

    JPanel p = new JPanel();

      JLabel title = new JLabel("Vending machine: ");
      JButton button1 = new JButton("1");
      JButton button2 = new JButton("2");
      JButton button3 = new JButton("5");
      JLabel label1 = new JLabel("Enter code: ");
      JTextField text1= new JTextField(3);
      JButton ok= new JButton("OK");
      JButton button4 = new JButton("Return change");
      JLabel label2 = new JLabel("Result is: ");
      JTextField text2= new JTextField(3);
      JLabel label3 = new JLabel("Current: ");
      JTextField text3= new JTextField(3);

      title.setBounds(200,5,250,80);
      title.setFont (title.getFont ().deriveFont (22.0f));
      p.add(title);
      p.setLayout(null);

      button1.setBounds(530,46,120,60);
      p.add(button1);
      button2.setBounds(530,172,120,60);
      p.add(button2);
      button3.setBounds(530,298,120,60);
      p.add(button3);
      label1.setBounds(555,414,120,60);
      p.add(label1);
      text1.setBounds(530,454,120,30);
      p.add(text1);
      ok.setBounds(530,550,120,60);
      p.add(ok);
      button4.setBounds(360,550,120,60);
      p.add(button4);
      label2.setBounds(230,530,120,60);
      p.add(label2);
      text2.setBounds(200,575,120,30);
      p.add(text2);
      label3.setBounds(50,530,120,60);
      p.add(label3);
      text3.setBounds(38,575,120,30);
      p.add(text3);



      getContentPane().add(p);
      setSize(700,700);
      setVisible(true); 


}
}

我想在这个地方添加新的JPanel:自动售货机:

https://i.stack.imgur.com/nkrpp.png

谢谢!

答案

即使您可以这样做,每次您希望在此框架上进行其他更改时,它也会给您带来伤害。

不是将JPanel定位到另一个JPanel,而是使用布局。

你不应该使用静态变量和空布局。

使用适当的布局管理器也许主面板使用BorderLayout。然后将主要组件添加到CENTER,将第二个面板添加到EAST。第二个面板也可以使用BorderLayout。然后,您可以根据需要将这两个组件添加到NORTH,CENTER或SOUTH。

以上是关于java中swing界面上怎么给jpanel上添加背景图片的主要内容,如果未能解决你的问题,请参考以下文章

Swing中怎样给Jpanel添加滚动条

Java Swing 怎么自定义界面背景图片

给jpanel 添加上下滚动条

java swing Jpanel 怎么添加一个Jdialog弹出框

Eclipse中jframe怎么用属性设背景图片

java swing编程问题:一个jframe中添加一个jpanel后,为jpanel添加一个滚动条,当jpanel中内容过多时滑动