Se connecter / S'enregistrer
Votre question

[java] generer instance vs variable static

Tags :
  • Swing
  • Programmation
Dernière réponse : dans Programmation
29 Avril 2008 17:39:44

Salut
J'ai créé 3 frame ( Frame , Frame1 , Frame2 ).

Frame génère Frame1 n fois.

Frame1 génère Frame2.

Sur Frame2 on peut cliquer sur bouton3 pour faire disparaitre bonton2 du Frame1.

Mais le problème c'est que le bouton2 disparait seulement sur la dernière Frame1 générée.

Je veux que, quand j'appuie sur bouton3 du Frame2 le bouton2 du Frame1 (<--- qui a généré ce Frame2) disparait.

Frame

  1. package index;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import javax.swing.*;
  6.  
  7.  
  8.  
  9. public class Frame extends JFrame {
  10. JPanel contentPane;
  11. JButton jButton1 = new JButton();
  12. ///////////////////////////////////////////////////////////////////////////////////////////////
  13. private Frame1[] appli = new Frame1[2];
  14. ///////////////////////////////////////////////////////////////////////////////////////////////
  15.  
  16. //Construct the frame
  17. public Frame() {
  18. enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  19. try {
  20. jbInit();
  21. }
  22. catch(Exception e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. //Component initialization
  27. private void jbInit() throws Exception {
  28. contentPane = (JPanel) this.getContentPane();
  29. jButton1.setBounds(new Rectangle(137, 57, 182, 32));
  30. jButton1.setText("jButton1");
  31. jButton1.addActionListener(new Frame_jButton1_actionAdapter(this));
  32. contentPane.setLayout(null);
  33. this.setSize(new Dimension(400, 300));
  34. this.setTitle("index");
  35. contentPane.setDebugGraphicsOptions(0);
  36. contentPane.add(jButton1, null);
  37. }
  38. //Overridden so we can exit when window is closed
  39. protected void processWindowEvent(WindowEvent e) {
  40. super.processWindowEvent(e);
  41. if (e.getID() == WindowEvent.WINDOW_CLOSING) {
  42. System.exit(0);
  43. }
  44. }
  45.  
  46. void jButton1_actionPerformed(ActionEvent e) {
  47. ///////////////////////////////////////////////////////////////////////////////////////////////
  48. for (int i = 0; i < 2; i++) {
  49. appli[i] = new Frame1();
  50. appli[i].setVisible(true);
  51.  
  52. }
  53. ///////////////////////////////////////////////////////////////////////////////////////////////
  54.  
  55.  
  56. }
  57. }
  58.  
  59. class Frame_jButton1_actionAdapter implements java.awt.event.ActionListener {
  60. Frame adaptee;
  61.  
  62. Frame_jButton1_actionAdapter(Frame adaptee) {
  63. this.adaptee = adaptee;
  64. }
  65. public void actionPerformed(ActionEvent e) {
  66. adaptee.jButton1_actionPerformed(e);
  67. }
  68. }



Frame1

  1. package index;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6.  
  7.  
  8.  
  9. public class Frame1 extends JFrame {
  10. JButton jButton1 = new JButton();
  11.  
  12. ///////////////////////////////////////////////////////////////////////////////////////////////
  13. static JButton jButton2 ;
  14. ///////////////////////////////////////////////////////////////////////////////////////////////
  15.  
  16.  
  17. public Frame1() {
  18. try {
  19. jbInit();
  20. }
  21. catch(Exception e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. private void jbInit() throws Exception {
  26.  
  27. jButton2 = new JButton();
  28. jButton1.setBounds(new Rectangle(85, 51, 231, 46));
  29. jButton1.setText("jButton1");
  30. jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
  31. this.getContentPane().setLayout(null);
  32. jButton2.setBounds(new Rectangle(78, 118, 228, 44));
  33. jButton2.setText("jButton2");
  34.  
  35. this.setSize(new Dimension(400, 300));
  36. this.setTitle("bb");
  37.  
  38. this.getContentPane().add(jButton1, null);
  39. this.getContentPane().add(jButton2, null);
  40. }
  41.  
  42. void jButton1_actionPerformed(ActionEvent e) {
  43.  
  44. ///////////////////////////////////////////////////////////////////////////////////////////////
  45. Frame2 fflo= new Frame2(this);
  46. fflo.setVisible(true);
  47. ///////////////////////////////////////////////////////////////////////////////////////////////
  48.  
  49. }
  50.  
  51. }
  52.  
  53. class Frame1_jButton1_actionAdapter implements java.awt.event.ActionListener {
  54. Frame1 adaptee;
  55.  
  56. Frame1_jButton1_actionAdapter(Frame1 adaptee) {
  57. this.adaptee = adaptee;
  58. }
  59. public void actionPerformed(ActionEvent e) {
  60. adaptee.jButton1_actionPerformed(e);
  61. }
  62. }



Frame2

  1. package index;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6.  
  7.  
  8.  
  9. public class Frame2 extends JFrame {
  10. JButton jButton1 = new JButton();
  11. JButton jButton2 = new JButton();
  12.  
  13.  
  14. ///////////////////////////////////////////////////////////////////////////////////////////////
  15. JButton jButton3 = new JButton();
  16. private Frame1 f;
  17. ///////////////////////////////////////////////////////////////////////////////////////////////
  18.  
  19.  
  20. ///////////////////////////////////////////////////////////////////////////////////////////////
  21. public Frame2(Frame1 f) {
  22. try {
  23. jbInit(f);
  24. }
  25. ///////////////////////////////////////////////////////////////////////////////////////////////
  26. catch(Exception e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. private void jbInit(Frame1 f) throws Exception {
  31. jButton1.setBounds(new Rectangle(50, 43, 158, 42));
  32. jButton1.setText("jButton1");
  33. jButton1.addActionListener(new Frame2_jButton1_actionAdapter(this));
  34. this.setSize(new Dimension(400, 300));
  35. this.setTitle("client");
  36.  
  37. this.getContentPane().setLayout(null);
  38. jButton2.setBounds(new Rectangle(224, 87, 132, 41));
  39. jButton2.setText("jButton2");
  40. jButton3.setBounds(new Rectangle(257, 27, 131, 31));
  41. jButton3.setText("jButton3");
  42. jButton3.addActionListener(new Frame2_jButton3_actionAdapter(this));
  43. this.getContentPane().add(jButton1, null);
  44. this.getContentPane().add(jButton2, null);
  45. this.getContentPane().add(jButton3, null);
  46. }
  47.  
  48. void jButton1_actionPerformed(ActionEvent e) {
  49.  
  50. }
  51.  
  52. void jButton3_actionPerformed(ActionEvent e) {
  53. ///////////////////////////////////////////////////////////////////////////////////////////////
  54. f.jButton2.setVisible(false);
  55. ///////////////////////////////////////////////////////////////////////////////////////////////
  56. }
  57. }
  58.  
  59. class Frame2_jButton1_actionAdapter implements java.awt.event.ActionListener {
  60. Frame2 adaptee;
  61.  
  62. Frame2_jButton1_actionAdapter(Frame2 adaptee) {
  63. this.adaptee = adaptee;
  64. }
  65. public void actionPerformed(ActionEvent e) {
  66. adaptee.jButton1_actionPerformed(e);
  67. }
  68. }
  69.  
  70. class Frame2_jButton3_actionAdapter implements java.awt.event.ActionListener {
  71. Frame2 adaptee;
  72.  
  73. Frame2_jButton3_actionAdapter(Frame2 adaptee) {
  74. this.adaptee = adaptee;
  75. }
  76. public void actionPerformed(ActionEvent e) {
  77. adaptee.jButton3_actionPerformed(e);
  78. }
  79. }

Autres pages sur : java generer instance variable static

29 Avril 2008 18:05:24

A priori, c'est étonnant que ça ne vautre pas.

Dans Frame2, où affectes-tu la variable privée f ?
29 Avril 2008 18:12:07

Pour corriger, retire le mot clé static dans Frame1

static JButton jButton2 ;

et dans le constructeur, rajoute :
this.f = f;
29 Avril 2008 18:19:47

Merci

"et dans le constructeur, rajoute :
this.f = f; "

Quel constructeur??

29 Avril 2008 19:25:19

google > langage objet
30 Avril 2008 11:13:12

Merci bien
Ca fonctionne
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS