Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème rafraichissement image avec Swing [ Archives / Divers ] (ejouvin)

mardi 14 septembre 2004 à 17:41:39 | Problème rafraichissement image avec Swing

ejouvin

Bonjour.

Je suis en train de faire une petite application qui contient une arborescence à gauche et une fenêtre de détail sur la droite.

Dans le code suivant, le problème est le suivant :
Au chargement, en cliquant sur les étoiles, on peut les faire passer de noir et blanc en couleur (si je clique sur la 4ème, les 4 premièers sont passés en couleur)
Avec clique droit de la souris, un popup apparaît et permet de tout passer en noir et blanc.

Dans l'arborescence, quand je clique sur le dernier noeuds, je rafraîchit la fenêtre de droite avec un nouveau Panel.
Mais à ce moment, l'action avec le clique droit se déroule bien mais les images ne sont pas mises à jour à l'affichage.
Le même comportement se produit quand j'utilise le menu

Où est mon erreur ?
D'avance merci.

Bonne fin de journée
Etienne


Voici le code complet :


Fichier JAppli.java

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSplitPane;

public class JAppli extends JFrame {

public Container paneRight;

public static void main(String argv[]) {

final JAppli frame = new JAppli();
frame.createMenu();

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
int confirm = JOptionPane.showOptionDialog(frame,"Really Exit ?", "Exit confirmation", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,null,null,null);
if (confirm==0) {
System.exit(0);
}
}
};
frame.addWindowListener(l);
frame.setVisible(true);
}


public JAppli() {
super("Ma fenêtre");
setSize(800, 600);
getContentPane().setLayout(new BorderLayout());

paneRight = new Container();
paneRight.setLayout( new BoxLayout(paneRight, BoxLayout.Y_AXIS ));

paneRight.add(new PaneEssai("Au chargement"));
Component paneLeft = new TreePanel(paneRight);

JSplitPane splitPanePrinc = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, paneLeft, paneRight);

splitPanePrinc.setDividerSize(8);
splitPanePrinc.setDividerLocation(200);
splitPanePrinc.setContinuousLayout(true);
splitPanePrinc.setOneTouchExpandable(true);

getContentPane().add(splitPanePrinc, BorderLayout.CENTER);

}


protected void createMenu() {
JMenuBar mBar = new JMenuBar();
JMenu mMenu = new JMenu("Menu");

Action actionConnect = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
paneRight.removeAll();
PaneEssai paneToAdd = new PaneEssai("Depuis Menu");
paneRight.add(paneToAdd);
paneRight.paintAll( paneToAdd.getGraphics() );
}
};

JMenuItem mnuI = new JMenuItem (actionConnect);
mnuI.setText("Essai");
mMenu.add (mnuI);
mBar.add(mMenu);
this.setJMenuBar( mBar );

}


}


Fichier TreePanel.java

import java.awt.Component;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.ToolTipManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

public class TreePanel extends JPanel {

class IconCellRenderer extends DefaultTreeCellRenderer {

public IconCellRenderer() {
setLeafIcon(null);
setOpenIcon(null);
}

public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean sel, boolean expanded, boolean leaf,
int row, boolean hasFocus) {
Component result = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
setIcon(null);
return result;
}
}

class SelectTrigger extends MouseAdapter {

public void mouseReleased(MouseEvent e) {

int x = e.getX();
int y = e.getY();
TreePath path = m_tree.getPathForLocation(x, y);
if (path == null)
return;

DefaultMutableTreeNode node = getTreeNode(path);

(TreePanel.this).changePanel( new PaneEssai("Depuis Arbo") );

}
}

private Container compTarget;
protected DefaultTreeModel m_model;
protected JTree m_tree;

public TreePanel(Container compTarget_P) {

compTarget = compTarget_P;

DefaultMutableTreeNode top = new DefaultMutableTreeNode(new String("Root"));
DefaultMutableTreeNode parent;
DefaultMutableTreeNode parentI;
DefaultMutableTreeNode node;
DefaultMutableTreeNode nodeHotel;


m_model = new DefaultTreeModel(top);
m_tree = new JTree(m_model) {};
ToolTipManager.sharedInstance().registerComponent(m_tree);


node = new DefaultMutableTreeNode(new String("Section"));
parent = node;
top.add(node);

node = new DefaultMutableTreeNode(new String("Essai"));
parent.add(node);


m_tree.setCellRenderer(new IconCellRenderer() );
m_tree.addMouseListener(new SelectTrigger());
m_tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );

m_tree.setShowsRootHandles(true);
m_tree.setEditable(false);

JScrollPane panePane = new JScrollPane();
panePane.getViewport().add(m_tree);

setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(panePane);

}

public void changePanel(JPanel paneToShow) {
if ( compTarget.getComponentCount() > 0 ) {
compTarget.removeAll();
}
compTarget.add( paneToShow );
compTarget.paintAll( paneToShow.getGraphics() );
}

DefaultMutableTreeNode getTreeNode(TreePath path) {
return (DefaultMutableTreeNode)(path.getLastPathComponent());
}

}


Fichier PaneEssai.java

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class PaneEssai extends JPanel {

private PanelStars objPanelStars;

public PaneEssai(String sLib) {
super();
buildPanel(sLib);
}

protected void buildPanel(String sLib) {

JPanel pPanel = new JPanel();
pPanel.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.insets = new Insets(20,10,0,10);

constraints.weighty = 0.0;
constraints.weightx = 1.0;
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.NORTHWEST ;

constraints.gridx = 0;
constraints.gridy = 0;
pPanel.add(new JLabel("Un label"),constraints);
constraints.gridx = 2;

constraints.gridx = 1;
constraints.gridy = 0;
pPanel.add(new JTextField(sLib, 15) ,constraints);

constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 2;
objPanelStars = new PanelStars(0);
pPanel.add(objPanelStars, constraints);

add (pPanel, BorderLayout.NORTH);

}


}


Fichier PanelStars.java

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;

public class PanelStars extends JPanel {

MouseListener actButtonAction = new MouseListener() {
public void mouseClicked(MouseEvent arg0) {
}

public void mouseEntered(MouseEvent arg0) {
}

public void mouseExited(MouseEvent arg0) {
}

public void mousePressed(MouseEvent arg0) {
}

public void mouseReleased(MouseEvent arg0) {
if (arg0.isPopupTrigger() ) {
if (objPopUp != null) {
int x = arg0.getX();
int y = arg0.getY() + 20;
objPopUp.show((StarLabel) arg0.getSource(), x, y);
}
return;
}
StarLabel objSrc = (StarLabel) arg0.getSource();
int iLim = objSrc.getNum();
refreshNbStars (iLim, false);
}
};

private static JPopupMenu objPopUp = null;
private final static String sCleanLib = "Clean";

private final static ImageIcon imgClean = new ImageIcon("clean.gif");

private int iNbStars;
private Vector vStars;

public PanelStars() {
this(0);
}

public PanelStars(int iNbStarsP) {
super();
buildWindow(iNbStarsP);

if (objPopUp == null) {
objPopUp = new JPopupMenu();

Action a1 = new AbstractAction(sCleanLib, imgClean) {
public void actionPerformed(ActionEvent e) {
refreshNbStars (0, true);
}
};
objPopUp.add(a1);
}
}


private void buildWindow(int iNbStarsP) {
boolean bSet;
setLayout( new FlowLayout(FlowLayout.RIGHT, 10, 10) );
vStars = new Vector(5);
iNbStars = iNbStarsP;

this.add ( new JLabel("Nombre d'étoile : ") );
StarLabel objStar;
for (int iCpt=1; iCpt <= 5; iCpt++ ) {
bSet = (iCpt <= iNbStarsP);
objStar = new StarLabel(iCpt, bSet, actButtonAction);
vStars.add(objStar);
this.add (objStar);
}
objStar = null;
}

public int getNbStars() {
return iNbStars;
}

private void refreshNbStars(int iNbStarsToSet, boolean bForceP) {
int iCpt;

if (!bForceP && iNbStarsToSet == 1 && iNbStars == 1) {
iNbStars = 0;
iNbStarsToSet = -1;
} else {
iNbStars = iNbStarsToSet--;
}

for (iCpt = 0; iCpt <= iNbStarsToSet; iCpt++) {
((StarLabel) vStars.get(iCpt)).setStarStatus(true);
}

for (iCpt = iNbStarsToSet + 1; iCpt < vStars.size(); iCpt++) {
((StarLabel) vStars.get(iCpt)).setStarStatus(false);
}

}

public void setNbStars(int iNbStarsP) {
refreshNbStars (iNbStarsP, true);
}

}



Fichier StarLabel.java

import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class StarLabel extends JLabel {
private final static ImageIcon objStarSet = new ImageIcon("star.gif");
private final static ImageIcon objStarUnSet = new ImageIcon("starbw.gif");

private boolean bSet;

private int iNum;

public StarLabel(int iNumP, boolean bSetP, MouseListener actStarP) {
super();
this.setStarStatus(bSetP);
this.addMouseListener( actStarP );
iNum = iNumP;
}

public int getNum () {
return iNum;
}

public void setStarStatus(boolean bSetP) {
bSet = bSetP;
if (bSet) {
setIcon(objStarSet);
} else {
setIcon(objStarUnSet);
}
}

}



mercredi 15 septembre 2004 à 18:59:54 | Re : Problème rafraichissement image avec Swing

ejouvin

Bonjour.

en fait, j'ai trouvé.
Le menu popup était déclaré en static et l'action associé ne modifiait pas des images déclarée en static.

Je n'ai pas bien compris le fonctionnement derrière tout cela, mais maintenant ça fonctionne.




Cette discussion est classé dans : java, public, import, javax, swing


Répondre à ce message

Sujets en rapport avec ce message

PB DE SCROLLBAR :'( - URGENT - [ par Foub12 ] Bonjour,Je ne comprends pas pourquoi ma scrollbar ne s'affiche. Il me semble pourtant avoir tout fait...HELP ME !!!!Si je mets un BorderLayout CENTER creation d'interface graphique en java [ par melianos31 ] Bonjour.Je développe en ce moment une interface graphique en java ( merci le tuto de tucobouch ), mais j'ai un petit probleme.Si je met tout dans la jTable/jCheckBox [ par Dellys ] Bonjour Je voudrai s'avoir commet afficher un jCheckBox sur un ma jTable dans une colonnes de type booléen et aussi lui attribuer un listner < Probleme de requete [ par thanatos67 ] Salut à tous.Je suis en BTS IRIS et pour mon projet je dois créer une base de donnée mysql qui va recevoir des données d'une station météorologique et PB dans main [ par thanatos67 ] Salut à toi lecteur. Oui toi! J'ai un petit soucis.J'ai déjà eu un premier soucis résolu grace à l'aide de TWINUTS (encore merci). J'ai une classe dan JTable supprimer ligne [ par crazysetup ] Salut a tous, j'ai un problème et j'aimerais trouver la solution.J'ai créé une JTable avec un bouton ajouter qui ajoute des lignes vides et un autre s JTable (aider moi SVP) please !! [ par amine1234Z ] Bonsoir voila j'ai ajouter juste le code, j'ai pas pu ajouter la base de donnée est ce que qlq un peut m'aider SVP . - c'est a vous de la créé Problème de gestion d'un Tableau jTable en java [ par beberto56 ] Bonjour,Voici une petite application test que j'ai créé afin de gérer un tableau en java. Cette application est composé d'une zone de saisie d'un tabl Probleme avec un result set [ par beberto56 ] Bonjour,je vouos expose mon problème. J'ai réalisé une petite application avec une class de connexion à SQLSERVER qui fonctionne et une interface grap COMMUNICATION APPLET SERVLET avec dopsot( ) [ par Java2386 ] bonjour je vien de realisé une communication entre une servlet et une applet (JAPPLET with swing). j'ai fait (en principe ) les etapes necessaire,


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.