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
To już zależy od tego jakiego layout-u używasz...
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
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
Gdybyś wkleił kod to byłoby o wiele łatwiej.
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());
}
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
znów to samo po zmianie rozmiaru cały panel znika
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.
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ć.
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();
}
}
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);