JPanel не показывает фоновое изображение - PullRequest
0 голосов
/ 23 апреля 2020

Я создал простой GUI с NetBeans. С помощью GUI Builder я начал создавать JFrame, затем Jpanel, а затем все другие компоненты, такие как кнопки. Для создания JPanel я использовал «bean» с именем DrawingPanel, который является классом, расширяющим JPanel, где я сделал переопределение paintComponent.

Когда я запускаю GUI, фоновое изображение не отображается, он появляется на границах компонентов, когда я нажимаю на них (например, маленький кусочек изображения появляется, когда я нажимаю на кнопку), но мне нужно, чтобы он появился полностью после создания GUI. Я действительно не знаю, где ошибка, может кто-нибудь, пожалуйста, помогите мне? Это очень важно.

Примечание: я должен использовать переопределение paintComponent, а не JLabel, чтобы показать изображение. Вот код:

public class DrawingPanel extends javax.swing.JPanel {

private Image background = null;

/**
 * Creates new form DrawingPanel
 */
public DrawingPanel() {
    initComponents();
    try {
        URL classURL = PokemonBattleSimulatorGUI.class.getResource("PokemonBattleSimulatorGUI.class");           
        URI classURI = classURL.toURI();                      
        String path = new java.io.File(classURI).getParentFile().getParentFile().getParentFile().getParentFile().getAbsolutePath()
                + "\\src\\resources\\images\\background.jpg";
        this.background = Toolkit.getDefaultToolkit().createImage(path);            
    } catch (URISyntaxException ex) {
        System.out.println("Error");
    }   
}

@Override
protected void paintComponent(Graphics g) {
    setOpaque(false);
    g.drawImage(this.background, 0, 0, 400, 400, null);
    super.paintComponent(g);               
}
}

public class PokemonBattleSimulatorGUI extends javax.swing.JFrame {


       public PokemonBattleSimulatorGUI() {
              initComponents();
       }
......

public static void main(String args[]) {
.....
.....
       java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new PokemonBattleSimulatorGUI().setVisible(true);
            }
        });
}
...