W ramach testów skalowania napisałem taki programik:
import javax.swing.*;
import java.awt.*;
public class Skalowanie extends JFrame
{
protected Image img;
protected Image img2;
//------------------------
public static void main(String[] args)
{
new Skalowanie();
}
//------------------------
public Skalowanie()
{
super("Skalowanie");
img=Toolkit.getDefaultToolkit().createImage("pliki graficzne/Ayers.jpg");
//img2=img.getScaledInstance(400,250,Image.SCALE_FAST);
add(new PanelSkali(this),BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
repaint();
}
//------------------------
public void run()
{
}
}
//------------------------------------------------
class PanelSkali extends JPanel
{
private Skalowanie parent;
//------------------------
public PanelSkali(Skalowanie parent)
{
this.parent=parent;
setPreferredSize(new Dimension(750,406));
}
//------------------------
public void paintComponent(Graphics g)
{
System.out.println(parent.img);
super.paintComponent(g);
g.drawImage(parent.img,0,0,null);
//g.drawImage(parent.img2,0,0,null);
}
}
Obrazek na ekranie pojawia się dopiero po zmianie rozmiarów (w góre lub w dół) głównego okna. Dlaczego?
Programik miał różne wersje (repaint() w innym miejscu, SwingUtilities.invokeLater()) w funkcji main(),..) .
W każdej wersji zachowywał sie tak samo.
//Rozwiązane, obrazek nie był gotowy:
boolean done=false;
while(!done)
done=g.drawImage(parent.img,0,0,null);