【问题标题】:Set a png as interface background java设置一个png作为界面背景java
【发布时间】:2016-05-21 00:35:58
【问题描述】:

我正在尝试将 png 文件设置为 jframe 表单的背景,例如 this sw,为此,我只需创建 jframe 表单 Test2 并调用它:

public static void main(String[] args) {
    Test2 t2 = new Test2();
    t2.setOpacity(0.55f);
    t2.setVisible(true);
}

在java类Test2中,设置为未装饰,并在面板中设置图像作为示例,但我不再存在,如何将其设置为我所有面板/jframe表单的背景?

public Test2() {
    setUndecorated(true);
    initComponents();
    Imagen imagen = new Imagen();
    panel1.add(imagen);
    panel1.repaint();
}

Imagen 类:

public class Imagen extends JPanel{

public Imagen() {
    this.setSize(905, 488); //se selecciona el tamaño del panel  //[767, 481]
}

//Se crea un método cuyo parámetro debe ser un objeto Graphics
public void paint(Graphics grafico) {
    Dimension height = getSize();

    //Se selecciona la imagen que tenemos en el paquete de la //ruta del programa
    ImageIcon Img = new ImageIcon(getClass().getResource("/images/reborn.png"));

    //se dibuja la imagen que tenemos en el paquete Images //dentro de un panel
    grafico.drawImage(Img.getImage(), 0, 0, height.width, height.height, null);

    setOpaque(false);
    super.paintComponent(grafico);
    }
}

【问题讨论】:

  • 如果Test2是一个接口,你为什么要实例化它?
  • 对不起,不是接口,是jframe形式,在main java中直接调用即可(main java除了调用Test2什么都没有)
  • 你试过类似this的东西吗?
  • @AlexSifuentes 它根本不起作用,我想要在 jframe 后面,而不是在 jframe 上

标签: java image


【解决方案1】:

要为组件设置背景图像,您可以使用容器的paintComponent(如JPanel),如下所示:

public class BackgroundPane extends JPanel {

  private Image image;

  public BackgroundPane(Image image) {
    super();
    this.setOpaque(false);
    this.image = image;
  }

  @Override
  protected void paintComponent(Graphics grphcs) {
    super.paintComponent(grphcs);
    // Draw image in center of component
    grphcs.drawImage(image, getWidth() / 2 - image.getWidth(this) / 2,
                            getHeight() / 2 - image.getHeight(this) / 2, 
                            this);
  }

}

要使用它,你可以这样做:

public static void main(String[] args) {
  SwingUtilities.invokeLater(() -> {

    JFrame frame = new JFrame();
    frame.setSize(640, 480);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // Remove border of JFrame
    frame.setUndecorated(true);
    // Set location in center
    frame.setLocationRelativeTo(null);
    // Set a transparent background
    frame.setBackground(new Color(1.0f, 1.0f, 1.0f, 0f));

    BackgroundPane panel = null;
    try {
      panel = new BackgroundPane(Toolkit.getDefaultToolkit().getImage(new URL(
              "http://www.shiaupload.ir/images/77810787432153420049.png")));
      panel.setOpaque(false);
    } catch (MalformedURLException ex) {
      System.out.println(ex);
      return;
    }
    frame.add(panel);
    setUI(panel);

    frame.setVisible(true);
  });
}

setUI 只是一种编写简单用户界面来测试它的方法。最终结果可能是这样的:

【讨论】:

  • 谢谢,我一个小时前就找到了解决办法,和你说的一样,反正我给你积分
猜你喜欢
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2010-12-14
相关资源
最近更新 更多