Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

swing : rafraichir la fenetre

9 réponses
Avatar
Vincent Courcelle
Bonsoir,
je suis en train de m'arracher les cheveux avec une fenetre swing
j'explique :
j'ai une JFrame, j'y met un JPanel et des JToolBar contenant des JButton
je veux rafraichir tout ca avec des nouveaux JButton, je fais donc un
JToolBar.removeAll() puis j'ajoute mes JButton
seulement aux endroits où il y avait des JButton et qu'il n'y en a plus, je
garde toujours la trace à l'écran des anciens boutons (devenus non
cliquables évidemment), quand je masque la fenetre et la fait réapparaitre
j'ai bien ce que je veux obtenir (plus de traces des boutons supprimés)
y a t'il une méthode à invoquer pour que swing daigne me rafraichir mon
écran ?
merci
mon cuir chevelu vous remercie aussi par avance

Vincent Courcelle
http://www.tubededentifrice.com et http://www.france-jeunes.net

9 réponses

Avatar
Vincent Courcelle
"Vincent Courcelle" a écrit dans le message de news:
41a771dd$0$19787$
Bonsoir,
je suis en train de m'arracher les cheveux avec une fenetre swing
j'explique :
j'ai une JFrame, j'y met un JPanel et des JToolBar contenant des JButton
je veux rafraichir tout ca avec des nouveaux JButton, je fais donc un
JToolBar.removeAll() puis j'ajoute mes JButton
seulement aux endroits où il y avait des JButton et qu'il n'y en a plus,
je garde toujours la trace à l'écran des anciens boutons (devenus non
cliquables évidemment), quand je masque la fenetre et la fait réapparaitre
j'ai bien ce que je veux obtenir (plus de traces des boutons supprimés)
y a t'il une méthode à invoquer pour que swing daigne me rafraichir mon
écran ?
merci
mon cuir chevelu vous remercie aussi par avance


j'ai résolu ca a la bourrin en faisant du setBounds (j'agrandi la fenetre de
1 pixel puis je la rapetisse)

Avatar
Mat Free
je suis en train de m'arracher les cheveux avec une fenetre swing
j'explique :
j'ai une JFrame, j'y met un JPanel et des JToolBar contenant des JButton
je veux rafraichir tout ca avec des nouveaux JButton, je fais donc un
JToolBar.removeAll() puis j'ajoute mes JButton
seulement aux endroits où il y avait des JButton et qu'il n'y en a plus, je
garde toujours la trace à l'écran des anciens boutons (devenus non
cliquables évidemment), quand je masque la fenetre et la fait réapparaitre
j'ai bien ce que je veux obtenir (plus de traces des boutons supprimés)
y a t'il une méthode à invoquer pour que swing daigne me rafraichir mon
écran ?
merci
mon cuir chevelu vous remercie aussi par avance


j'ai résolu ca a la bourrin en faisant du setBounds (j'agrandi la fenetre de
1 pixel puis je la rapetisse)


Et un updateUI() ne fonctionne pas ?

--
Mat


Avatar
Vincent Courcelle
"Mat Free" <mat.free_no_spam+ a écrit dans le message
de news:


Et un updateUI() ne fonctionne pas ?


je doit l'appliquer sur quel objet ?
(ca marceh pas sur ma frame)
entre temps j'ai trouvé myFrame.repaint ca marche au poil, mais updateUI est
peut être encore plus rapide ?
merci en tout cas

Avatar
Nicolas
C'est effectivement assez relou, notamment quand on remplace un panel
par un autre.
Ici l'idée est de faire un cardLayout (empilement) mais de n'empiler
qu'un élément.

/*
@author Nicolas Zozol, Aurelien Geraud
*
* please send me improvement
*/
import gui.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class FenetreAccueil extends JFrame {


private class EcouteurFenetre implements WindowListener {
private JFrame frame;
public EcouteurFenetre(JFrame frame) {
this.frame = frame;
}
public void windowActivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowClosing(WindowEvent e) {
frame.dispose();
System.exit(0);
}
public void windowDeactivated(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
}


/** Creates a new instance of test */
public FenetreAccueil() {
super();
EcouteurFenetre ef = new EcouteurFenetre(this);
addWindowListener(ef);

// look and feel
try{
com.l2fprod.gui.plaf.skin.SkinLookAndFeel lookNFeel = new
com.l2fprod.gui.plaf.skin.SkinLookAndFeel();
//fr.ludo.utils.ui.LudoLookAndFeel lookNFeel = new
fr.ludo.utils.ui.LudoLookAndFeel();
UIManager.setLookAndFeel(lookNFeel);
}catch (javax.swing.UnsupportedLookAndFeelException e){

}
}


/**
* @param args the command line arguments
*/
public static void main(String[] args) {
FenetreAccueil f = new FenetreAccueil();
Conteneur c=new Conteneur(f);
CardLayout layout = new CardLayout();
Identification ident = new Identification("localhost",
"studytools", "root", "boum");
f.getContentPane().setLayout(layout);
f.getContentPane().add(c,"conteneur");
c.change_contenu(ident);
layout.show(f.getContentPane(),"conteneur");
f.setSize(800,500);
f.show();
}

}



package gui;
import java.awt.CardLayout;
import javax.swing.*;
import javax.swing.plaf.basic.BasicLookAndFeel;

/**
*
* @author Nicolas Zozol
*
* please send me improvement
*/
public class Conteneur extends javax.swing.JPanel {

JFrame parentFenetre;
JApplet parentApplet;
JPanel parentPanel;
public CardLayout layout;

String type_parent;

/** Creates new form Conteneur */
public Conteneur(JFrame fenetre) {
this.type_parent="JFrame";
this.parentFenetreþnetre;
initComponents();

}

public Conteneur(JApplet applet){
this.type_parent="JApplet";
this.parentApplet=applet;
initComponents();

}


public Conteneur(String type_main)
{
this.type_parent=type_parent;
//this.add(new JButton
("Hellooooo"),java.awt.BorderLayout.CENTER);
}

public void change_contenu (JPanel panelAAjouter)
{

this.removeAll();
this.layout=new CardLayout();
this.setLayout(layout);
this.add(panelAAjouter,"ajout");
this.layout.show(this,"ajout");

this.setVisible(true);
this.revalidate();
//this.show();


}

public void set_fenetre(JFrame fenetre)
{
this.parentFenetre = fenetre;
this.type_parent="JFrame";
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {

setLayout(new java.awt.GridBagLayout());

}


// Variables declaration - do not modify
// End of variables declaration

}
Avatar
yvon.thoravalNO-SPAM
Nicolas wrote:

C'est effectivement assez relou, notamment quand on remplace un panel
par un autre.
Ici l'idée est de faire un cardLayout (empilement) mais de n'empiler
qu'un élément.


Merci pour cette info, j'ai voulu tester sur ma bécanne mais ça fait
quoi :
Identification ident = new Identification("localhost", "studytools",
"root", "boum");

???
--
yt

Avatar
Nicolas
(Yvon Thoraval) écrivait
news:1gnyiri.1wblesxe7j9cjN%:

Nicolas wrote:

C'est effectivement assez relou, notamment quand on remplace un panel
par un autre.
Ici l'idée est de faire un cardLayout (empilement) mais de n'empiler
qu'un élément.


Merci pour cette info, j'ai voulu tester sur ma bécanne mais ça fait
quoi :
Identification ident = new Identification("localhost", "studytools",
"root", "boum");

???


Ca c'est la connexion à la base de donnée, c'était inclu au départ, désolé.


Avatar
Thibal
Je vois pas pourquoi vous vous prenez autant la tête !
La question de départ c'était comment rafraîchir une fenêtre...

Il suffit de faire un maFenetre.repaint();
Ou plus précis maToolBar.repaint();

Par contre updateUI ça n'a rien à voir il me semble. Je crois que ça
permet à un composant de mettre à jour la valeur de ses champs en
fonction du look & feel et de la position actuelle des composants.

Donc à faire éventuellement avant un repaint(), mais ça ne le remplace
pas enfin je ne crois pas...

Si quelqu'un qui maîtrise Swing mieux que moi peut apporter la lumière
là dessus ?
Avatar
Nicolas
Thibal écrivait news:coenf4$1n0b$1
@biggoron.nerim.net:

Je vois pas pourquoi vous vous prenez autant la tête !
La question de départ c'était comment rafraîchir une fenêtre...

Il suffit de faire un maFenetre.repaint();
Ou plus précis maToolBar.repaint();

Par contre updateUI ça n'a rien à voir il me semble. Je crois que ça
permet à un composant de mettre à jour la valeur de ses champs en
fonction du look & feel et de la position actuelle des composants.

Donc à faire éventuellement avant un repaint(), mais ça ne le remplace
pas enfin je ne crois pas...

Si quelqu'un qui maîtrise Swing mieux que moi peut apporter la lumière
là dessus ?



Pen ca c'est la logique, encore que ca fait ramer la machine (mais
maintenant avec des tri-proc à 28 GHz, c pas grave :D). Plus logique serait
de ne faire paint() que sur les composants à afficher, mais voilà ca marche
pas si bien que ca. Yaurait quelque chose de pourri dans le royaume (comme
une JVM Microsoft?)

Avatar
yvon.thoravalNO-SPAM
Nicolas wrote:


Ca c'est la connexion à la base de donnée, c'était inclu au départ, désolé.


Oui, ok, mais qu'est-ce que nécessite le gui ? je veux dire je peux
faire une classe bidon Identifcation, qui retourne qqc juste pour tester
non ?
--
yt