IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[JTabbedPane] Composant commun: Synchronisation entre les deux onglets


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 64
    Points
    64
    Par défaut [JTabbedPane] Composant commun: Synchronisation entre les deux onglets
    Bonjour,

    Edit: le problème a un peu évolué, cf mon dernier post sur les problemes de synchro entre les deux onglets.

    j'ai un problème avec mon JTabbedPane : j'ai deux onglets qui ont une structure similaire, un JSplitPane qui contient en haut une JTable et en bas un JPanel avec un graphe. Le graphe entre les deux onglets est le meme tandis que les JTable changent. J'ai fait des recherches sur le forum et je ne peux visiblement pas avoir le même composant dans mes deux JSplitPane car un composant n'appartient qu'à un seul composant parent (si j'ai bien compris).

    Donc il y a deux astuces pour "faire comme si" : soit on copie le composant et on le met dans le deuxieme onglet, soit on le fait naviguer entre les deux onglets en enlevant le composant du premier onglet et en l'ajoutant dans le second.
    Avec cette dernière méthode, ça marche dans l'idée mais l'affichage du composant est un peu lent car il est un peu lourd et on n'a donc pas l'illusion qu'il s'agit du même. Et c'est franchement pas pratique d'avoir un retard à l'affichage.

    Je pense donc qu'il faut que je m'oriente vers la premiere methode qui copie mais là, je rencontre un souci : mon composant n'apparait que dans le 2e onglet. Pour rappel, le composant en question est un JPanel qui contient un graphe.
    Pour copier, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WinSDF  SDFPanel = new WinSDF();
     
    WinSDF SDFPanel3D = SDFPanel;
    avec WinSDF qui est la classe qui étend JPanel et qui contient le graphe. Ensuite, j'ai mis tous les éléments des onglets nécessaires en double, y compris les JSplitPane :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, up, down);
     
    pane3D = new JSplitPane(JSplitPane.VERTICAL_SPLIT, up3D, down3D);
    up et up3D correspondent aux JTables, down et down3D correspondent aux JPanel (enfin, les up et les down sont des JScrollPane qui contiennt les JTable et les graphes).

    Donc en faisant comme ça, je me retrouve avec un JScrollPane down vide dans le 1er onglet et un JScrollpane down3D qui contient bien le graphe.
    Comment faire pour que je puisse avoir mes deux graphes simultanément ?

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le code suivant n'est pas une copie de l'objet mais de la référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WinSDF SDFPanel3D = SDFPanel;
    Il faut en faire une copie explicitement, par exemple si ton composant est cloneable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WinSDF SDFPanel3D = (WinSDF) SDFPanel.clone();
    Ou encore avec un constructeur de copie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WinSDF SDFPanel3D = new WinSDF(SDFPanel);
    a++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 64
    Points
    64
    Par défaut
    WinSDF etend JPanel qui n'est pas Cloneable donc je me suis penché sur le constructeur de copie, notion que je ne connaissais pas et je suis tombé sur ça :http://www.developpez.com/upload/ved...chap=17&page=3
    qui dit à la fin, que le constructeur de copie ne marche pas en Java.

    Je suis donc obligé de passer par l'implémentation de l'interface Cloneable ?

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Zanton
    qui dit à la fin, que le constructeur de copie ne marche pas en Java.
    Cela ne fonctionne pas "comme en C++", mais cela convient tout à fait...

    a++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 64
    Points
    64
    Par défaut
    J'ai fait un constructeur de copie et j'ai un souci : desormais, j'ai le graphe dans le premier onglet et juste un JScrollPane vide dans le second.

    Pour mon constructeur de copie, j'ai ça :
    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
    public class WinSDF  extends JPanel {
     
    	private XYDataset data = GenerateSDF.createDataset();
    	private static int num;
    	private GraphieSDF chart;
    	private final ChartPanel panel;
    	protected static JFreeChart graphie1;
     
    	public WinSDF()
    	{
     
    		chart = new GraphieSDF();
    		graphie1 = chart.createPointChart(data);
    		panel = new ChartPanel(graphie1, true, true, true, true, true);
     
            panel.setPreferredSize(new java.awt.Dimension(500, 400));
            panel.addChartMouseListener(new ChartMouseListener(){
     
            	...
     
            });
     
    		this.add(panel);
    		this.setEnabled(true);
     
    	}
     
     
     
    	public WinSDF(WinSDF t){
    		this.data = t.data;
    		this.chart = t.chart;
    		this.graphie1 = t.graphie1;
    		this.panel = t.panel;
            }...
    	}
    J'ai passé le code sur les MouseListeners (c'est pas important je pense ?). Qu'est ce que j'ai oublié ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 64
    Points
    64
    Par défaut
    Bon, j'ai presque réussi en implementant l'interface Cloneable
    J'ai un souci cependant : je peux normalement faire des "actions" sur mon graphe (c'est un JFreeChart) comme zoomer, cliquer sur un point, etc. et là, si je le fais dans le deuxième graphe, les actions se produisent dans le premier graphe et je suis obligé de faire un aller-retour entre les deux graphes pour mettre à jour le deuxième graphe
    Comment puis-je régler ce souci ?

Discussions similaires

  1. [JSP] [JSF] interactions entre les deux ?
    Par faya972 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 11/05/2006, 21h25
  2. [GTK/FMOD] Erreur entre les deux
    Par titor dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 28/12/2005, 20h23
  3. [visual C++/Matlab] communication entre les deux
    Par Bilouzzz dans le forum MFC
    Réponses: 2
    Dernier message: 15/10/2005, 05h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo