Zmiana wielkości okna

0

Mam problem ze zmianą wielkości okna za pomocą myszki chcę aby razem z oknem zmieniał także rozmiar panel (na którym jest grafika) po zmianie rozmiaru powstaje biała plama w to nowe miejsce

0

To już zależy od tego jakiego layout-u używasz...

0

czesc

poczytaj o FillLayout tylko o to zalezy na ktorym kompozycie/Panelu umiescisz bo moze masz jeszcze jakies "obok" i nie bedzie wypelnial parenta kompletnie

przykladowy link http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/SWTFormLayoutSample.htm

0

Nie jest tylko jeden panel z grafiką(jeżeli można nazwać parę kresek ruszających się po niebieskim tle "grafiką" :-) ),
a czy do tego celu nie można użyć ComponentListener'a ustawionego na JFrame() tylko tyle że mam problem z pobraniem zmiany wielkości ramki jeżeli pobieram wielkość przez getX() i getY() to zawsze otrzymuję to samo, a mianowicie 0 i 22 przez co nie widać panelu

0

Gdybyś wkleił kod to byłoby o wiele łatwiej.

0
public class Main extends Frame implements ComponentListener {

	public JFrame ramka;
	public Container ct;
	public Canvas c;
	public static JPanel j1;
	int x;
	int y;
	
	public Main() {
		ramka = new JFrame();
		ramka.setTitle("Lotnisko");
		ramka.setBounds(0, 0, 800, 600);
		ct = ramka.getContentPane();

		j1 = new JPanel();
		ct.add(j1,"Center");

		ramka.setVisible(true);

	/*	//zamknicie okna przez przycinicie X
		ramka.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				ramka.dispose();
                //System.out.println(System.currentTimeMillis());
				System.exit(0);
			}
		});*/
	ramka.setDefaultCloseOperation(3);
	ramka.addComponentListener(this);
	
//	ramka.setResizable(false);
	
	x=ramka.getX();// tu otrzymuje 0
	y=ramka.getY();// a tu 22
	
	}

	public static void main (final String args[]) {
        //System.out.println(System.currentTimeMillis());
		new Main();
		Rysowanie r = new Rysowanie(j1);
		r.start();
	}

public void componentHidden(ComponentEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void componentMoved(ComponentEvent e) {

		
	}

	public void componentResized(ComponentEvent e) {
		if(e.getSource()==ramka)
		j1.setSize(x+ramka.getX(), y+ramka.getY());
		
		
		j1.repaint();
	System.out.println("zmiana="+ramka.getX()+" "+ramka.getY());
	
	
	}
0

Zmień

ramka.setBounds(0, 0, 800, 600);
ct = ramka.getContentPane();
j1 = new JPanel();
ct.add(j1,"Center");

na

ramka.setSize(800, 600);
               
j1 = new JPanel();
ct.add(BorderLayout.CENTER, j1);

I powinno śmigać. Nie mogę sprawdzić, bo nie mam klasy Rysowanie. :P

0

znów to samo po zmianie rozmiaru cały panel znika

0
quba88 napisał(a)

znów to samo po zmianie rozmiaru cały panel znika

W takim razie problem leży po stronie rysowania. Wywal jeszcze ten ComponentListener.

0

Całą klasę bym przepisał tak:

import java.awt.BorderLayout;
import java.awt.Container;

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

@SuppressWarnings("serial")
public class Main extends JFrame {
	
	private Container ct;
//	private Canvas c;
	private JPanel pnlGlowny;

	public Main() {
		setTitle("Lotnisko");
		setSize(800, 600);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		pnlGlowny = new JPanel(new BorderLayout());
		ct.add(BorderLayout.CENTER, pnlGlowny);
		
		setVisible(true);
	}
	
	private JPanel getPnlGlowny() {
		return pnlGlowny;
	}
	
	public static void main(final String args[]) {
		// System.out.println(System.currentTimeMillis());
		Main ramka = new Main();
		Rysowanie r = new Rysowanie(ramka.getPnlGlowny());
		r.start();
	}
}

Zupełnie nie wiem co robi Rysowanie. Z punktu widzenia klasy Main wszystko jest ok i powinnno działać.

0

Oczywiście się pomyliłem:

import java.awt.BorderLayout;
import java.awt.Container;

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

@SuppressWarnings("serial")
public class Main extends JFrame {
	
//	private Canvas c;
	private JPanel pnlGlowny;

	public Main() {
		setTitle("Lotnisko");
		setSize(800, 600);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		pnlGlowny = new JPanel(new BorderLayout());
		add(BorderLayout.CENTER, pnlGlowny);
		
		setVisible(true);
	}
	
	private JPanel getPnlGlowny() {
		return pnlGlowny;
	}
	
	public static void main(final String args[]) {
		// System.out.println(System.currentTimeMillis());
		Main ramka = new Main();
		Rysowanie r = new Rysowanie(ramka.getPnlGlowny());
		r.start();
	}
}
0

Wiem gdzie jest problem właśnie w klasie Rysuj tam z góry jest założony rozmiar jPanel w tej klasie

while(! Thread.interrupted()) {
			im = jp.createImage(800, 600);// i wty miejscu
			Graphics ofg = im.getGraphics();
			ofg.finalize();

			ofg.setColor(Color.blue);
			ofg.fillRect(0, 0, 800, 600);//w tym

            l.rysuj(ofg);

            for (int i=0; i<k.size(); i++) {
                for (int j=0; j<k.elementAt(i).s.size(); j++) 
                    k.elementAt(i).s.elementAt(j).rysujSamolot(ofg,j,i);
			}

            godzina(ofg);

			jp.getGraphics().drawImage(im,0,0,jp);

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