Obrazek - dostosowywanie się (skalowanie) do aktualnych rozmiarów okna

0

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.

0

Może spróbuj tak:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Program {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ImagePanel panel = new ImagePanel(new ImageIcon("D:\\1.jpg").getImage());

		JFrame frame = new JFrame();
		frame.getContentPane().add(panel);
		frame.pack();
		frame.setVisible(true);
	}

	public static class ImagePanel extends JPanel {
		private static final long serialVersionUID = 1L;
		private Image img;

		public ImagePanel(String img) {
			this(new ImageIcon(img).getImage());
		}

		public ImagePanel(Image img) {
			this.img = img;
			Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
			setPreferredSize(size);
			setMinimumSize(size);
			setMaximumSize(size);
			setSize(size);
			setLayout(null);
		}

		public void paintComponent(Graphics g) {
			g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
		}
	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1