Вы делаете вещи сложными для себя, имея очень запутанную структуру программы, и я предлагаю вам упростить вещи лот .
С одной стороны, ваш текущий класс MinesweeperMenu не нуждается в расширении MinesweeperPanel, а последний - в расширении JFrame.Тогда у вас есть статический JFrame где-то еще - это слишком много JFrame, и для загрузки вы пытаетесь отобразить ваше изображение в одном JFrame, но показывает другой, у которого нет изображения.Ваша программа нуждается только в одном JFrame, и, вероятно, ее следует создать, заполнить ее содержимым, упаковать и отобразить в одном месте, а не разбрасывать здесь и там, как вы делаете.
Вы пытаетесь отобразить картинкув переопределении paintComponent, но этот метод никогда не будет вызван, так как ваш класс расширяет JFrame (в конце концов), а JFrame не имеет этого метода.Вы используете правильный метод, но класс должен расширять JPanel, и у вас должна быть аннотация @Override
над блоком метода paintComponent, чтобы быть уверенным, что вы на самом деле переопределяете родительский метод.
Выследует избавиться от все статического все в этой программе.Единственным статичным здесь должен быть метод main и, возможно, некоторые константы, но это все.
Здесь больше ошибок, и у меня слишком мало времени, чтобы просмотреть все из них.Попробуйте начать с самого начала, начать с малого, заставить маленькие биты работать, а затем сложить их вместе.
Например, сначала создайте очень маленькую программу, которая пытается прочитать изображение в объекте Image, поместите егов ImageIcon поместите ImageIcon в JLabel и отобразите JLabel в JOptionPane, это просто, просто чтобы посмотреть, можете ли вы читать изображения в порядке, например, что-то вроде этого:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class TestImages {
// *** your image path will be different *****
private static final String IMG_PATH = "src/images/image01.jpg";
public static void main(String[] args) {
try {
BufferedImage img = ImageIO.read(new File(IMG_PATH));
ImageIcon icon = new ImageIcon(img);
JLabel label = new JLabel(icon);
JOptionPane.showMessageDialog(null, label);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Затемкогда вы это сделаете, посмотрите, можете ли вы теперь создать JPanel, который показывает то же изображение в своем методе paintComponent, и отобразить этот JPanel в JOptionPane.
Затем создайте JFrame и отобразите JPanel, содержащий изображение.в JFrame.
Через последовательные итерации вы будете тестировать концепции, исправлять ошибки и строить свою программу.