Comment remplacer un Composite avec un autre Composite
Je veux remplacer un Composite avec un autre dans une JFrame
J'ai déjà chercher et essayer mon code mais rien ne se passera
c'est mon code :
public class Frame extends JFrame {
private Container contain;
private JPanel reChange,reChange2;
private JButton reChangeButton;
public Frame() {
super("Change a panel");
setSize(350, 350);
setLayout(null);
setLocationRelativeTo(null);
setResizable(false);
reChange = new JPanel(null);
reChange.setBackground(Color.red);
reChange.setSize(240, 225);
reChange.setBounds(50, 50, 240, 225);
add(reChange);
reChangeButton = new JButton("Change It");
reChangeButton.setBounds(20, 20, 100, 20);
add(reChangeButton);
reChangeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//System.out.println("in");
contain = getContentPane();
contain.removeAll();
//System.out.println("in2");
reChange2 = new JPanel(null);
reChange2.setBackground(Color.white);
reChange2.setSize(240, 225);
reChange2.setBounds(50, 50, 240, 225);
//System.out.println("in3");
contain.add(reChange2);
validate();
//System.out.println("in4");
setVisible(true);
//System.out.println("in5");
}
});
}
public static void main(String[] args) {
Frame frame = new Frame();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
quelqu'un peut m'aider ? Merci beaucoup
OriginalL'auteur Ardy Yonathan | 2013-02-14
Vous devez vous connecter pour publier un commentaire.
ne pas utiliser
AbsoluteLayout
changement
validate();
dansactionPerformed
àcontain.validate();
et suit aveccontain.repaint();
renommer le nom de la classe (réservé Java word, ou des méthodes de nom)
Frame
(java.awt.Frame
) àMyFrame
(par exemple)utilisation
CardLayout
au lieu de supprimer et ajouter un nouveauJPanel
de l'exécutionrevalidate()
survalidate()
. @ArdyYonathan Voir here pour un exemple de CardLayoutKroukamp pas valable pour tous les utilisateurs Java, la plupart d'entre eux continuent à utiliser Java6 et version mineure (raté il y a plus de restrictions pour Windows OS)
+1 vrai .. Lol mais peut-être que notre code va les forcer à obtenir java 7 (ou la dernière version) 🙂
aaaach 🙂 c'est une erreur de helicopers utilisateurs admin access dans Windows, par exemple simple de l'utilisateur (windows intégré sur l'accès) ne sera jamais JRE mis à jour, etc (plus de mises à jour, assurez-vous peuvent être assez facilement configurable, mais pourquoi s'embêter avec ça, dot) ....
OriginalL'auteur mKorbel
Vous devez appeler
validate()
et puisrepaint()
sur le contenant du panneau après le supprimer et ajouter des opérations.OriginalL'auteur Dan D.
que vous devez faire comme ceci :
OriginalL'auteur Alya'a Gamal
Plusieurs problèmes avec votre code. Voici la version fixe:
OriginalL'auteur Mikhail Vladimirov
Supposons que vous disposez d'une fonction, generatePanel() qui renvoie un Composite que vous pouvez sauvegarder dans une variable d'instance de type Composite:
Suppose que vous avez déjà placé un Composite dans un récipient, peut-être à un index spécifique à l'intérieur de cette autre récipient et que vous souhaitez conserver l'ordre des éléments à l'intérieur de ce conteneur. Au lieu de tout détruire à l'aide de removeAll(), je préfère une approche plus précise qui remplace uniquement le composant qui doit être remplacé:
OriginalL'auteur user3785010
Essayer ce,
Suivants code de chargement de la deuxième composite (NewOrder) à la première composite(jpMain)
OriginalL'auteur Kusal Dissanayake