Je dois réinstituer un JPanel
dans une application que j'écris (fondamentalement c'est une fenêtre de saisie où l'utilisateur peut construire un graphique, et je voudrais que l'utilisateur puisse le vider, donc en utilisant CardLayout
est pas une option), et je pensais à utiliser quelque chose comme ceci:Redéfinir jpanels
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class AppletProve extends JPanel implements MouseListener, MouseMotionListener{
private JPanel p1;
public AppletProve(){
super();
setLayout(null);
Dimension dim=Toolkit.getDefaultToolkit().getScreenSize();
dim.width=(int) (dim.width*0.66);
dim.height=(int) (dim.height*0.75);
setPreferredSize(dim);
addMouseListener(this);
}
public void crea(){
p1=new JPanel();
p1.setBounds(10,10,60,70);
p1.setBackground(Color.YELLOW);
JLabel lbl1=new JLabel("prova1");
p1.add(lbl1);
add(p1);
}
public void collega(){
remove(p1);
p1=new JPanel();
p1.setBounds(10,10,60,70);
p1.setBackground(Color.BLUE);
JLabel lbl2=new JLabel("prova2");
p1.add(lbl2);
add(p1);
}
@Override
public void mouseClicked(MouseEvent arg0) {
System.out.println("chiamato");
collega();
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent arg0) {
repaint();
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
le problème est que si le panneau p1 est reinstantiated, étant donné que les changements de couleur d'arrière-plan, lbl2 n'apparaît pas, qui ne serait pas si mauvais que je devais seulement rétablir le panneau à un état vide, mais je pensais utiliser cette méthode aussi pour ajouter des responsabilités au panneau à travers le modèle de décorateur, donc je dois montrer les composants de la nouvelle reinsta panneau lié.
Donc, vous dites que je devrais créer un nouveau JPanel, l'ajouter à la mise en page, puis retirer l'ancien? Cela pourrait m'aider à mettre le panneau dans son JFrame, puisque j'ai utilisé WindowBuilder d'Eclipse pour le composer (oh btw, je me suis juste demandé ce qui n'allait pas avec le code: j'ai oublié de valider()) – Orgrim
Je n'y avais pas pensé profondément (ni regardé votre code de près). Je soulignais simplement que votre message est basé sur un malentendu. –