ragazzi ho un problema quando effettuo il repaint del mio frame in java il layout degli oggetti viene completamente stravolto mentre vorrei mantenere il layout identico come posso fare??
In pratica è un programma che quando schiaccio sul pulsante mi dovrebbe scambiare la prima immagine con la seconda
Posto il codice :
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyPanel extends JPanel
{
public MyPanel(MyFrame p_frame)
{
frame = p_frame;
//inizializziamo gli oggetti grafici (varibili istanza)
homer1= new JLabel("<html>[b]Homer1[b]
</html>");
homer2= new JLabel("<html>[b]Homer2[b]
</html>");
immagine1 = new JLabel(new ImageIcon("1_Homer.jpg"));
immagine2 = new JLabel(new ImageIcon("2_Homer.jpg"));
bottone = new JButton("<html>[b]Start[b]
</html>");
this.disegna();
//registriamo il Listener (Ascoltatore) alla sorgente (bottone)
// relativamente all'evento ActionListener (pressione del pulsante)
bottone.addActionListener(new Ascoltatore(this));
}
private class Ascoltatore implements ActionListener
{
public Ascoltatore(MyPanel p_panel)
{
panel = p_panel;
}
public void actionPerformed(ActionEvent e)
{
JLabel immagine3 = immagine1;
immagine1 = immagine2;
immagine2 = immagine3;
panel.disegna();
frame.validate();
frame.repaint();
}
private MyPanel panel;
}
public void disegna()
{
this.setLayout(layout);
//inseriamo gli oggetti grafici nel pannello utilizzando il LayoutManger
//inseriamo la prima JLabel (0,0)
lim.gridx = 0;
lim.gridy = 0;
lim.gridwidth =1;
lim.gridheight=1;
lim.weightx=0;
lim.weighty=0;
lim.fill = GridBagConstraints.NONE;
layout.setConstraints(homer1, lim);
this.add(homer1);
//inseriamo la seconda JLabel (0,1)
lim.gridx = 1;
lim.gridy = 0;
lim.gridwidth =1;
lim.gridheight=1;
lim.weightx=0;
lim.weighty=0;
lim.fill = GridBagConstraints.NONE;
layout.setConstraints(homer2, lim);
this.add(homer2);
//inseriamo la prima immagine (1,0)
lim.gridx = 0;
lim.gridy = 1;
lim.gridwidth =1;
lim.gridheight=1;
lim.weightx=0;
lim.weighty=0;
lim.fill = GridBagConstraints.NONE;
layout.setConstraints(immagine1, lim);
this.add(immagine1);
//inseriamo la seconda immagine (1,1)
lim.gridx = 1;
lim.gridy = 1;
lim.gridwidth =1;
lim.gridheight=1;
lim.weightx=0;
lim.weighty=0;
lim.fill = GridBagConstraints.NONE;
layout.setConstraints(immagine2, lim);
this.add(immagine2);
//inseriamo il JButton (2,0) e (2,1)
lim.gridx = 0;
lim.gridy = 2;
lim.gridwidth =2;
lim.gridheight=1;
lim.weightx=0;
lim.weighty=0;
lim.fill = GridBagConstraints.NONE;
layout.setConstraints(bottone, lim);
this.add(bottone);
}
private MyFrame frame;
private GridBagLayout layout = new GridBagLayout();
private GridBagConstraints lim = new GridBagConstraints();
private JButton bottone;
private JLabel homer1;
private JLabel homer2;
private JLabel immagine1;
private JLabel immagine2;
}
ecco cosa esce :
PRIMA : http://a.imagehost.org/view/0095/prima
DOPO : http://a.imagehost.org/view/0346/dopo
Grazie a tutti.

Rispondi quotando
) e non è certo "perfetto" .... anzi le sue pecche le ha!
