Я попытался переопределить метод paintComponent во внутреннем классе JPanel и нарисовать некоторое изображение. Но если я загружаю изображение в конструктор, метод paintComponent не вызывает. Если изображение загрузки в основном классе, то все в порядке. Что это? Вот код, который does'nt работастранная вещь с внутренним классом JPanel
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
JFrame window;
//Image image=new ImageIcon("D://domik.png").getImage();
class JPanelExt extends JPanel {
Image image;
public JPanelExt(){
image=new ImageIcon("D://domik.png").getImage();
System.out.println("constructor");
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("paint");
g.drawImage(image, 0, 0, this);
g.drawRect(0, 400, 100, 100);
}
}
public Main(){
window=new JFrame("Flowers");
window.setSize(430, 480);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanelExt flower1 =new JPanelExt();
flower1.setBounds(100, 100, 200, 200);
flower1.setToolTipText("House");
window.setLayout(null);
window.add(flower1);
}
public static void main(String[] args) {
Main main=new Main();
}
}
И SYSOUT пишет только "конструктор"
Но если я изменить код таким образом
public class Main {
JFrame window;
Image image=new ImageIcon("D://domik.png").getImage();
class JPanelExt extends JPanel {
//Image image;
public JPanelExt(){
//image=new ImageIcon("D://domik.png").getImage();
System.out.println("constructor");
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("paint");
g.drawImage(image, 0, 0, this);
g.drawRect(0, 400, 100, 100);
}
И SYSOUT пишет "конструктор", "краски "
Я не могу этого понять))
Начните с вызова 'setVisible' на вашем кадре последним - и воспользуйтесь соответствующим менеджером макетов – MadProgrammer
Вы также должны проверить [Начальные потоки] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency /initial.html) – MadProgrammer
Кроме того, вместо предоставления «Абсолютного пути», пожалуйста, обратитесь к этому [ответ] (http://stackoverflow.com/a/11372350/1057230), чтобы добавить изображения в приложение. –