Probleme gestion onglet avec infonode

Résolu
zoouug Messages postés 4 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 27 mai 2011 - 29 avril 2011 à 11:44
 Utilisateur anonyme - 2 mai 2011 à 18:49
Bonjour a tous

Je suis en train de devellopper une petite IHM en java.
Dans ma fenetre principale, j'ai plusieurs onglets qui proviennent de la librairie infonode.

Dans chaque onglet il y a un jlabel.

Mon probleme est le suisvant: Lorsque je créé plusieur onglets et que je veux modifier mon label grace au bouton "info", c'est le label du dernier onglet qui est modifier et non celui de l'onglet courant.

J'aimerai donc savoir si vousq aviez une solution a me proposer pour justement acceder au label de mon onglet courant et pas seulement du dernier.

voila mon code :
package testOnglet;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import net.infonode.tabbedpanel.TabbedPanel;
import net.infonode.tabbedpanel.titledtab.TitledTab;

public class Main extends JFrame {

private static final long serialVersionUID = 2962697937633848778L;
TabbedPanel onglet;
JButton butClose, butNewOnglet, butInfo;
TitledTab titreOnglet;
int i = 0;
JLabel lab;
JPanel contain = new JPanel();
JPanel panCentre;


public Main() {
setSize(800, 640);
this.setLocationRelativeTo(null);
this.setTitle("maxitest");
this.setResizable(false);
setVisible(true);

butNewOnglet = new JButton("Nouvel Onglet");
onglet = new TabbedPanel();

contain.setLayout(new BorderLayout());


contain.add(butNewOnglet, BorderLayout.SOUTH);
contain.add(onglet, BorderLayout.CENTER);
this.setContentPane(contain);
listener();

}

private void listener() {


butNewOnglet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("on créé un onglet");

lab = new JLabel("label");
butInfo = new JButton("info");
panCentre = new JPanel();
titreOnglet = new TitledTab("test " + i, null, panCentre, null);


panCentre.setLayout(new BorderLayout());
panCentre.add(lab, BorderLayout.CENTER);
panCentre.add(butInfo, BorderLayout.SOUTH);
onglet.addTab(titreOnglet);
i++;

butInfo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
lab.setText("coucou");
}
});
}
});
}

public static void main(String[] args) {
@SuppressWarnings("unused")
Main m = new Main();
}
}



En vous remerciant

Zoouug

3 réponses

zoouug Messages postés 4 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 27 mai 2011
2 mai 2011 à 09:39
Amis codeurs, Bonjour

Merci pour ta réponse Pylouq.
J'ai réussi a résoudre mon probleme ce week end. Je n'ai pas pu poster avant, désolé ^^
bref, en fait j'ai réussi a récupérer le label courant.
Je récupere l'onglet courant puis grace aux méthodes getContentComponent et getComponent, j'arrive a récupérer mon label.
Je met le code a disposition si ca peut aider d'autres personnes.
voila :)
package gestionOngletOk;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import net.infonode.tabbedpanel.TabbedPanel;
import net.infonode.tabbedpanel.titledtab.TitledTab;

public class Main extends JFrame{

private static final long serialVersionUID = 2962697937633848778L;
TabbedPanel onglet;
JButton butClose, butNewOnglet, butInfo;
TitledTab titreOnglet;
int i = 0;
JLabel lab;
JPanel contain = new JPanel();
JPanel panCentre;
protected JLabel labelCoucou ;


public Main() {
setSize(800, 640);
this.setLocationRelativeTo(null);
this.setTitle("maxitest");
this.setResizable(false);
setVisible(true);

butNewOnglet = new JButton("Nouvel Onglet");
onglet = new TabbedPanel();

contain.setLayout(new BorderLayout());


contain.add(butNewOnglet, BorderLayout.SOUTH);
contain.add(onglet, BorderLayout.CENTER);
this.setContentPane(contain);
listener();

}

private void listener() {

final Main temporaire = this ;

butNewOnglet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("on créé un onglet");

labelCoucou = new JLabel("label");
butInfo = new JButton("info");
panCentre = new JPanel();
titreOnglet = new TitledTab("test " + i, null, panCentre, null);

panCentre.setLayout(new BorderLayout());
panCentre.add(labelCoucou, BorderLayout.CENTER);
panCentre.add(butInfo, BorderLayout.SOUTH);
onglet.addTab(titreOnglet);
i++;

butInfo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
TitledTab source = (TitledTab) onglet.getSelectedTab() ; ;
JPanel panel = (JPanel) source.getContentComponent() ;
labelCoucou = (JLabel) panel.getComponent(0) ;
labelCoucou.setText("coucou");
}
});
}
});

}

public static void main(String[] args) {
@SuppressWarnings("unused")
Main m = new Main();
}


}
3
Utilisateur anonyme
29 avril 2011 à 17:24
Pour faire simple :

Dans ta classe tu as un objet JLabel lab.
Dans le code de ton bouton butNewOnglet, tu réutilises à chaque fois l'objet lab lorsque tu veux créer un onglet. Donc dès que tu crées un onglet, un nouveau JLabel est intancié "à la place" de l'ancien.

Comme dans le code de butInfo tu réutilises lab, c'est donc le dernier qui est modifié.

Essaye de voir si avec ta librairie tu n'as pas des méthodes qui te retournent l'onglet courant comme getSelectedTab ou autre.


-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --
0
Utilisateur anonyme
2 mai 2011 à 18:49
Utilise l'outil Réponse acceptée pour ton dernier post afin de le signaler comme résolu.

Bonne continuation.


-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --
0
Rejoignez-nous