Sto costruendo un' interfaccia grafica e non riesco a comprendere alcune cose. La seguente interfaccia presenta alcuni problemi: il codice che ritengo rilevante è piuttosto breve
public void init()
{
//creazione interfaccia grafica
setSize(1278,921);
//creazione griglia
griglia=new GridBagLayout();
gbc= new GridBagConstraints();
gbc.fill=GridBagConstraints.BOTH;
getContentPane().setLayout(griglia);
//aggiunta componente alla griglia
buildConstraints(gbc,0,0,1,1,98,98);
pannelloGrafico=new JPanel();
griglia.setConstraints(pannelloGrafico,gbc);
//aggiunta componente alla griglia
buildConstraints(gbc,1,0,1,1,2,98);
riempimentoDx=new JButton("riempimentoDx");
griglia.setConstraints(riempimentoDx,gbc);
//aggiunta componente alla griglia
buildConstraints(gbc,0,1,2,1,98,2);
riempimentoBasso=new JButton("riempimentoBasso");
griglia.setConstraints(riempimentoBasso,gbc);
addKeyListener(this);
addMouseMotionListener(this);
pannelloGrafico.addKeyListener(this);
pannelloGrafico.setFocusable(true);
// riempimentoDx.addKeyListener(this);
//riempimentoBasso.addKeyListener(this);
add(pannelloGrafico);
add(riempimentoDx);
add(riempimentoBasso);
pannelloGrafico.setVisible(true);
setVisible(true);
pannelloGrafico.setFocusable(true);
repaint();
.. altro
}
public void paint(Graphics g)
{
Graphics2D schermo=(Graphics2D) g;
Image buffervirtuale=createImage(getSize().width ,getSize().height);
Graphics2D gr=(Graphics2D)buffervirtuale.getGraphics();
//disegno i bordi del grafico: bordo sx, bordo basso, bordo dx, bordo alto
grafico.draw(gr,mouseX,mouseY);
((Graphics2D)pannelloGrafico.getGraphics()).drawIm age(buffervirtuale,0,0,this);
}
alcuni chiarimenti:
- grafico.draw contiene dei semplici drawline;
- buffervirtuale viene utilizzato per velocizzare il refresh grafico
- L' evento MouseMoved contiene una chiamata a repaint()
I problemi e i dubbi sono diversi
1) Eliminando setVisible(true) ottengo che il JPanel mostra l' immagine creata, ma non mostra i JButton. Tali bottoni vengono visualizzati solo quando ci passo sopra con il mouse
2) Lasciando setVisible(true), come da codice incollato, visualizzo correttamente i bottoni ma non l' immagine che ho disegnato: tale immagine viene mostrata non appena muovo il mouse su un qualsiasi punto della finestra applet
3) Il KeyListener mi consente di modificare l' immagine, ma una volta che clicco su un bottone keyListener non funziona più, ossia un click sul JPanel contenente l' immagine non restituisce il focus al JPanel stesso. Perché per i bottoni il focus cambia e per il JPanel no?
4) il KeyListener come vedete viene assegnato al contenitore JApplet: perché se tolgo il KeyListener al JPanel l' ascoltatore non funziona?
Per ulteriori chiarimenti postate pure.
Ringrazio tutti per l' attenzione
PS: qualcuno può segnalarmi un Buon tutorial che spieghi le interfacce grafiche nei dettagli?