JFrame не показывает картинку из JLabel - PullRequest
0 голосов
/ 12 июня 2019

мой JFrame не показывает изображение моего JLabel. JFrame показывается, но без фонового изображения. Ожидаемый результат был: JFrame, который показывает фоновое изображение ("stelle.png"). Буду очень признателен, если кто-нибудь сможет помочь :-) Спасибо! Simon

    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 голосов
/ 12 июня 2019

Привет. Подправили ваше решение ниже:

сохранить структуру пакета для 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. Приветствия

...