Witam,
mój problem jest taki jak w temacie - chciałbym, żeby wgrany do panelu obrazek dopasowywał się do aktualnych rozmiarów okna (po zmianie za pomocą myszki).
Oto co do tej pory stworzyłem:
KLASA TWORZĄCA PANEL Z OBRAZKIEM:
package testobrazki;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.*;
import java.awt.Toolkit;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JPanel;
public class Rysowanki extends JPanel
{
private String nazwa;
private Image img;
private Image img2;
public Rysowanki(String nazwa)
{
super();
this.nazwa = nazwa;
}
@Override
public void addNotify() {
super.addNotify();
img = Toolkit.getDefaultToolkit().getImage(nazwa);
img2 = img.getScaledInstance(this.getSize().width+1,this.getSize().height+1 , Image.SCALE_FAST);
//to +1 jest po to, bo bez tego wyrzuca błąd gdy ta ramka jest częścią większej aplikacji - wiem, metoda na chama
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(img2,0,0,null);
}
}
MAIN - RAMKA
package testobrazki;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JFrame;
public class Main extends JFrame {
public Main()
{
initComponents();
int szer = Toolkit.getDefaultToolkit().getScreenSize().width;
int wys = Toolkit.getDefaultToolkit().getScreenSize().height;
this.setSize(szer/2,wys/2);
int szerRamki = this.getSize().width;
int wysRamki = this.getSize().height;
this.setLocation((szer - szerRamki)/2,(wys-wysRamki)/2);
panel.setSize(this.getSize().width,this.getSize().height);
this.getContentPane().add(BorderLayout.CENTER,panel);
}
private void initComponents() {
this.setDefaultCloseOperation(3);
this.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
int x = e.getComponent().getSize().width;
int y = e.getComponent().getSize().height;
System.out.println(x);
System.out.println(y);
panel.setSize(x, y);
System.out.println(panel.getSize());
}
});
}
private Rysowanki panel = new Rysowanki("tlo.jpg");
public static void main(String[] args) {
new Main().setVisible(true);
}
}
Próbowałem coś kombinować z repaint() albo revalidate(), ale dopiero zaczynam programować w Javie i nie udało mi się osiągnąć zamierzonych efektów.
Ponadto, obrazek czasami się wyświetla, a czasami nie - wtedy trzeba właśnie jakoś zmienić rozmiar okna, nie mam pojęcia o co chodzi.
Proszę o pomoc - walczę z tym już chyba 4 dzień, a na jutro musi to być zrobione...
Pozdrawiam,
Krzysiek.