Добрый день. Есть изображение, и методы paintComponent(Graphics g) и repaint(). Так вот: изображение рисуется только при если вручную менять размер окна мышкой, а я хочу что бы сразу. По идее для этого нужно поместить repaint() в конструктор, но это не работает( Структура проги: основной класс MainWindow extends JFrame, из него создается класс GameField extends JPanel, и в этом GameField созданы методы paintComponent(Graphics g) и repaint(). Изображение рисуется внутри метода paintComponent.
package com.company;
import javax.swing.*;
public class MainWindow extends JFrame {
public static final double VERSION = 0.1;
public MainWindow() {
setTitle("... " + VERSION);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(1024, 768);
setVisible(true);
setLocation(400,100);
add(new GameField()); // it extends JPanel
}
public static void main(String[] args) {
MainWindow mainWindow = new MainWindow();
}
}
Класс GameField:
package com.company;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GameField extends JPanel implements ActionListener {
private final int SPEED = 5;
private int shipX, shipY;
private int asteroidX, asteroidY;
private Image ship;
private Image asteroid;
private Image shot;
public GameField(){
setBackground(Color.black);
loadImages();
repaint();
}
public void loadImages(){
ImageIcon shipIcon = new ImageIcon("ship.png");
ship = shipIcon.getImage();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(ship,500, 500, this);
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
}
Метод setVisible(true) у JFrame нужно вызывать в самую последнюю очередь. В вашем же случае вы сначала заставляете фрейм отрендерится, а уже потом наполняете его содержимым, должно быть наоборот.
public MainWindow() {
setTitle("... " + VERSION);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(1024, 768);
setLocation(400,100);
add(new GameField());
setVisible(true);
}
Продвижение своими сайтами как стратегия роста и независимости