zoouug
Messages postés4Date d'inscriptionvendredi 29 avril 2011StatutMembreDernière intervention27 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();
}
}
zoouug
Messages postés4Date d'inscriptionvendredi 29 avril 2011StatutMembreDernière intervention27 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();
}
}
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 --