JFrame不显示来自JLabel的图片

时间:2019-06-12 05:20:25

标签: java printing jframe jlabel

我的JFrame不显示我的JLabel的图像。 显示了JFrame,但没有背景图像。 预期结果是:显示背景图像(“ stelle.png”)的JFrame。 如果有人可以提供帮助,我将不胜感激:-) 谢谢! 西蒙

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


 public class Label extends JLabel {   

@Override protected void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g.drawImage(Var.quadro, 0, 0, 800,600, null);
    repaint();
}
}



 public class Var {
static BufferedImage quadro;    
public Var(){
try {
quadro = ImageIO.read(new File("quadri/stelle.png"));
}
catch (IOException e) {
e.printStackTrace();
System.out.println("No picture");
}

}
}



public class Gui {
public Gui(){

JFrame rahmen = new JFrame();
rahmen.setSize(800,600);
rahmen.setLocationRelativeTo(null);
rahmen.setVisible(true);
rahmen.setResizable(false);
rahmen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
rahmen.setLayout(null);
rahmen.setTitle("Gioco");
Label label = new Label();

label.setVisible(true);
label.setBounds(0, 0, 800, 600);
rahmen.add(label);

}
}

1 个答案:

答案 0 :(得分:0)

嗨,您在下面调整了您的解决方案:

请保持Test.java(可以复制其中的所有代码)和您的图片stelle.png的包结构完整,请参见下面的附件,以使此示例看起来不那么有用。

要在您自己的结构中合并更改,请将图像保存在相对的软件包quadri中(refer the attached image,请参阅我如何保存它)

请注意我的评论。

    package com.demo.test.stack;

    import java.awt.Graphics;
    import java.awt.Graphics2D;

    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;

    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JLabel;

//Main class for executing test
    public class Test {
        public static void main(String[] args) {
            new Gui();
        }

    }

//this is you extended Label class be careful while importing
    class Label extends JLabel {

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
            g.drawImage(Var.quadro, 0, 0, 800, 600, null);
            repaint();
        }
    }

    class Var {
        static BufferedImage quadro;

//initializing the static variable in static class block (since you are using it directly) 
        static {
            try {
//gettting the absolute path of your image
                URL url = Test.class.getResource("quadri/stelle.png");
                System.out.println(url.getPath());
                quadro = ImageIO.read(new File(url.getPath()));
                System.out.println("quadro: " + quadro);
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("No picture");
            }

        }
    }

//your feature class
    class Gui {
        public Gui() {

            JFrame rahmen = new JFrame();
            rahmen.setSize(800, 600);
            rahmen.setLocationRelativeTo(null);
            rahmen.setVisible(true);
            rahmen.setResizable(false);
            rahmen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            rahmen.setLayout(null);
            rahmen.setTitle("Gioco");
            Label label = new Label(); //<<this label is your extended label (i.e com.demo.test.stack.Label)and not awt label 
            label.setVisible(true);
            label.setBounds(0, 0, 800, 600);
            rahmen.add(label);

        }
    }

Below is the package structure, take care of package in imports as well

让我知道您是否还有其他疑问。

关于,欢迎来到SO。 干杯