Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 11 janv. 2007 à 19:42
Salut,
tu peux faire comme l'esemple ci-dessous (pour l'exemple il y a mieux avec héritage d'une classe vers l'autre mais bon vu le niveau de la question prefere pas brusquer (ce message s'addresse aux initiés)) :
la classe Main.java :
public class Main {
public static void main(String[] args) {
Frame2 f2 = new Frame2();
Frame1 f1 = new Frame1(f2);
f1.setVisible(true);
f2.setVisible(true);
}
}
public class Frame1 extends JFrame implements ActionListener{
private static final long serialVersionUID = -6423377463807408292L;
private Frame2 f2 = null;
private JButton btRandomString = null;
public Frame1(Frame2 f2){
this.f2 = f2;
btRandomString = new JButton();
btRandomString.setText("Random string");
btRandomString.addActionListener(this);
JPanel p = new JPanel();
p.add(btRandomString);
setContentPane(p);
//truc de base
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(btRandomString))
f2.setStr("" + new Random().nextInt());
}
}
public class Frame2 extends JFrame{
private static final long serialVersionUID = -7679386738342918692L;
private JLabel lbl = null;
public Frame2(){
setContentPane(lbl = new JLabel());
//truc de base
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 300);
setLocationRelativeTo(null);
}
public void setStr(String str){
lbl.setText(str);
}
}
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_amelA
Messages postés83Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention23 juin 2007 14 janv. 2007 à 16:00
bonjour,
il suffisait de déclarer ton bouton comme static et faire un show de ta frame que tu viens de mettre à jour.
voici ton code corrigé et ça devrai marcher:
la classe Frame1.java :
import java.awt.*;
import javax.swing.*;
public class Frame1 extends JFrame{
private JPanel jPanel1 = new JPanel();
public JButton jButton2 = new JButton(); //tu peux laisser private
private Frame2 f2 = new Frame2();
public Frame1(){ // pas la peine de mettre Frame2 f2 comm argument
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
jPanel1.setLayout(null);
this.f2= f2; // pas la peine de mettre ça
}
void jButton2_actionPerformed(ActionEvent e) {
f2.jButton1.setEnabled(true);
f2.show();
}
}
la classe Frame2.java :
import java.awt.*;
import javax.swing.*;
public class Frame2 extends JFrame{
private JPanel jPanel1 = new JPanel();
static public JButton jButton1 = new JButton();
cs_amelA
Messages postés83Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention23 juin 2007 14 janv. 2007 à 16:01
cependant, il y a un problème et je sais pas comment le résoudre, c'est quand tu executes ce code, l'ancienne frame reste toujours affichée il faudra la fermer, mai le dispose ne marche pas dans ce cas.
si quelqu'un peut nous éclairer ça serait bien
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_amelA
Messages postés83Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention23 juin 2007 18 janv. 2007 à 19:24
bonsoir,
ta solution m'interesserait bien, j'aimerai bien savoir comment tu fais pour accéder à ces variables (ou objets) sans utiliser le static public, parce que mon programme n'a marché qu'après avoir remplacé le "private" par le "static public".
et pour quoi faut il éviter l'utilisation des "static" et des "public"?
merci.
public class Frame2 extends JFrame implements ActionListener{
private static final long serialVersionUID = -8324465475991592808L;
private JButton jButton = null;
private Frame1 f1 = null;
public JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("jButton classe Frame2");
jButton.setEnabled(false);
jButton.addActionListener(this);
}
return jButton;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(getJButton())){
f1.getJButton().setEnabled(true);
getJButton().setEnabled(false);
}
}
}
Note : la méthode show() est deprecated ...
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
pseudo85
Messages postés64Date d'inscriptionmardi 7 février 2006StatutMembreDernière intervention17 juillet 2009 23 janv. 2007 à 07:25
bonjour,
à propos de la dernière solution, ça marche mais si la Frame2 est appelée par une autre frame dans le projet, et qu'après cela on clique sur jButton de la Frame1, il y a aucune modification dans la Frame2, sauf si on la réaffiche avec le : getFrame2().setVisible(true), (le but est que les modifications se passe sur la même Frame2 affichée au départ).
merci