J'ouvre une fenêtre dans mon programme qui est codée de la façon suivante: En fait, les développeurs ajoute un objet histogramme et un objet bouton qui contient deux boutons. L'un deux permet de fermer la fenêtre en prenant en compte les modifications que l'on aura faite sur l'histogramme, le deuxième remet les paramètres de l'histogramme par défaut et ferme la fenêtre. Si on la réouvre, l'histogramme a repris sa "forme" d'origine.

Je voudrais que le bouton annuler (celui qui restaure par défaut l'histogramme et ferme la fenêtre) ne ferme plus cette fenêtre mais permette de la rafraîchir.

J'ai essayé de mettre this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); dans le WinowClosing ou dans le code de la fenêtre. Rien n'y fait.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
public class Fenetre extends JFrame implements WindowListener
//public class Fenetre extends JFrame
{
    private JPanel mainPanel;
    private Histogramme histo;
    private Bouton boutons;   
    private int largeur , hauteur;
    private JButton affinage;
    private Attribut attr;
  /*
   *constructeur
   *@param coord - coordonnees des differents points
   *@param borne - bornes des classes
   *@param x0 - position x0
   *@param y0 - position y0
   *@param x - position de la fin de l'abscisse
   *@param y - position de la fin de l'ordonnée
   *@param detailAttr - detail de l'attribut courant
   *@param typeGraphe - le type du graphe
   *@param largeur - taille de l'axe des abscisses
   *@param haut - taille de l'axe des ordonnées
   */
 
    public Fenetre(Vector coord,Vector borne,int x0,int y0,int x,int y,
            Attribut attrib,int larg , int haut , JButton affin)
    {
        super(System.getProperty("affinage.name"));
 
        mainPanel = new JPanel(new BorderLayout());
 
        //bouton affinage
        affinage=affin;
        affinage.setEnabled(false);
        attr = attrib;
        attr.setAffiche(true);
        //addWindowListener(this);
 
        largeur = larg;
        hauteur = haut;
 
        histo = new Histogramme(coord,borne,attrib,x0,y0,x,y);
        boutons = new Bouton(attr,affinage);
 
        JLabel histogramme = new JLabel("\n"+ System.getProperty("tborder.histogramme"));
        histogramme.setFont(new Font("arial",Font.BOLD,14));
        mainPanel.add(histogramme,BorderLayout.NORTH);
        mainPanel.add(histo,BorderLayout.CENTER);
        mainPanel.add(boutons,BorderLayout.EAST);
        setContentPane(mainPanel);
        setSize(largeur , hauteur);
        setVisible(true);
        this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        repaint();   
    }
 
    public void windowClosing(WindowEvent e) {affinage.setEnabled(true);attr.setAffiche(false);}
    public void windowOpened(WindowEvent e) {}
    public void windowActivated(WindowEvent e) {}
    public void windowDeactivated(WindowEvent e) {}
    public void windowClosed(WindowEvent e) {this.setVisible(true);}
    public void windowIconified(WindowEvent e) {}
    public void windowDeiconified(WindowEvent e) {}
}
J'ai essayé de le placer dans le code du bouton:
 
    public void actionPerformed(ActionEvent e)
    {
        // Si on valide notre affinage
        if(e.getSource() == valider)
        {       
            valider();
        }
 
        /* Si on annule
        *  On remet tout à zéro
        */
        if(e.getSource()== annuler)
        {
            attr.setStatus(0);
            attr.aPreparer = true;
            attr.setPoints(new Vector());
            attr.setBornes(new Vector());
            attr.setBornesInitiales(new Vector());
 
            // Pour le bouton affinage
            attr.setAffiche(false);
            affinage.setEnabled(true);
 
            this.getTopLevelAncestor().setVisible(false);
 
            //this.getTopLevelAncestor().repaint();  
        }
    }
ce qui me ferme ma fenêtre c'est this.getTopLevelAncestor().setVisible(false); mais si je le met à true, là ça ne la ferme plus mais ça ne réinitialise pas mon histogramme. J'ai pensé à une astuce: existe-t-il un code permettant de fermer puis réouvrir la fenêtre?