Fonction qui ajoute un JLabel.

Fermé
snp3109 Messages postés 77 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 10 juillet 2014 - 25 mars 2013 à 21:31
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 26 mars 2013 à 19:21
Bonjour à tous,
J'aimerai savoir si il était possible de créer une fonction qui permet d'ajouter plusieurs JLabel quand on appuie sur un bouton par exemple.
Si quelqu'un a une idée.
Merci beaucoup.



1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
25 mars 2013 à 21:38
Bien sûr c'est même assez simple... le plus dur étant de l'intégrer correctement dans ton application existante.

Exemple :

public class fenetre
{	
public static void main(String[] args)
{
final JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());

final JButton button = new JButton("+");
frame.add(button);
button.addActionListener(new ActionListener()
{
    int n=1;
	
    public void actionPerformed(ActionEvent e)
    {
        frame.add(new JLabel(String.valueOf(n++)));
        frame.pack();
    }
});

frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
1
snp3109 Messages postés 77 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 10 juillet 2014 3
25 mars 2013 à 22:38
En effet, j'ai essayé d'adapter ton code au mien mais j'ai eu du mal.
Je vais essayé d'être le plus clair possible.

J'aimerai en cliquant sur le bouton "+" (le JButton plusanalogique) afficher dans le label textapercutrame "voie1". Si après j'appuie sur le bouton "+" (le JButton plustor) j'aimerai afficher "voie1" "tor1".
Si j'appuie une seconde voie sur le plusanalogique alors ça affichera "voie1" "tor1" "voie2" ... Ainsi de suite.

J'espère avoir était clair.
Je pense qu'il faudrait compléter les méthode compteuranalogiqueplus et compteurtorplus qui intéragissent directement avec les deux boutons "+".

Merci de ta patiente KX.

public class fenetre
{
int compteurtor = 0;
int compteurtanalogique = 0;
int compteurnbrvoie = 0;
int comteurapercutrame = 0;

private JLabel lab = null;
private JLabel lab1 = null;
private JLabel lab2 = null;
private JLabel lab3 = null;
private JLabel lab4 = null;
private JLabel lab5 = null;
private JLabel lab6 = null;
private JLabel lab7 = null;
private JLabel lab8 = null;
private JLabel lab9 = null;
private JLabel lab10 = null;
private JLabel lab11 = null;
private JLabel octetdeparture = null;
private JLabel octetend = null;
private JLabel checkum = null;
private JLabel textapercutrame;
private JTextField text;
private JTextField text1;
private StringBuilder sb;
private JComboBox cb = null;
private CheckboxGroup groupe = null;
private Checkbox checkbox1 = null;
private Checkbox checkbox2 = null;
private JButton plusanalogique = null;
private JButton moinsanalogique = null;
private JButton plustor = null;
private JButton moinstor = null;
private JButton valider = null;
private JButton annuler = null;
private JCheckBox jrmi1;

public fenetre()
{
JFrame fenetre =new JFrame("Outil de création de nouveaux formats de trame");
fenetre.setSize(new Dimension(500,550));
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pan=new JPanel();
pan.setBackground(new Color(71,145,203));

pan.setLayout(null);

lab=new JLabel("Nouveau SNR");
lab.setBounds(0,0,500,60);
pan.add(lab);

lab1=new JLabel("Nom du nouveau format de trame :");
lab1.setBounds(8,38,200,60);
pan.add(lab1);
text = new JTextField("NouveauSNR");
text.setBounds(206,58,110,20);
pan.add(text);

lab2=new JLabel("Définition de la trame");
lab2.setBounds(0,74,500,60);
pan.add(lab2);

lab3=new JLabel("Octet de départ : ");
lab3.setBounds(8,110,100,60);
pan.add(lab3);
text1 = new JTextField("FF");
text1.setBounds(105,130,30,20);
pan.add(text1);

lab7=new JLabel("Ajouter/Supprimer une voie analogique : ");
lab7.setBounds(8,154,230,50);
pan.add(lab7);
plusanalogique = new JButton("+");
plusanalogique.setBounds(300,154,41,41);
plusanalogique.addActionListener(new compteuranalogiqueplus());
pan.add(plusanalogique);
moinsanalogique = new JButton("-");
moinsanalogique.setBounds(342,154,41,41);
moinsanalogique.addActionListener(new compteuranalogiquemoins());
pan.add(moinsanalogique);

lab8=new JLabel("Ajouter/Supprimer une voie Tout Ou Rien(TOR) : ");
lab8.setBounds(8,190,270,50);
pan.add(lab8);
plustor= new JButton("+");
plustor.setBounds(300,196,41,41);
plustor.addActionListener(new compteurtorplus());
pan.add(plustor);
moinstor = new JButton("-");
moinstor.setBounds(342,196,41,41);
moinstor.addActionListener(new compteurtormoins());
pan.add(moinstor);

lab4=new JLabel("Dans la ");
lab4.setBounds(8,232,50,65);
pan.add(lab4);
cb=new JComboBox();
cb.setBounds(55,255,130,20);
pan.add(cb);

lab5=new JLabel("Nombre d'octets : ");
lab5.setBounds(190,232,105,65);
pan.add(lab5);

CheckboxGroup groupe = new CheckboxGroup();
checkbox1=new Checkbox("1",groupe,true);
checkbox1.setBounds(300,251,30,30);
pan.add(checkbox1);
checkbox2=new Checkbox("2",groupe,false);
checkbox2.setBounds(300,267,40,40);
pan.add(checkbox2);

checkum = new JLabel("Checkum : ");
checkum.setBounds(8,280,105,65);
pan.add(checkum);
jrmi1 = new JCheckBox();
jrmi1.setSelected(true);
jrmi1.setBounds(70,306,20,15);
pan.add(jrmi1);

lab9=new JLabel("Aperçu de la trame");
lab9.setBounds(0,340,500,60);
pan.add(lab9);

lab6=new JLabel("Nombre de voies : ");
lab6.setBounds(8,390,110,20);
pan.add(lab6);

lab11 = new JLabel("0");
lab11.setBounds(115,389,25,25);
pan.add(lab11);

octetdeparture = new JLabel(" FF");
octetdeparture.setOpaque(true);
octetdeparture.setBackground(Color.yellow);
octetdeparture.setBounds(8,430,22,25);
pan.add(octetdeparture);

octetend= new JLabel(" CRC");
octetend.setOpaque(true);
octetend.setBackground(Color.red);
octetend.setBounds(250,430,30,25);
pan.add(octetend);

textapercutrame = new JLabel("");
textapercutrame.setOpaque(true);
textapercutrame.setBackground(Color.green);
textapercutrame.setBounds(45,430,200,25);
pan.add(textapercutrame);

JButton valider= new JButton("Valider");
valider.setBounds(140,475,90,30);
pan.add(valider);
JButton annuler= new JButton("Annuler");
annuler.setBounds(250,475,90,30);
pan.add(annuler);

fenetre.setContentPane(pan);
fenetre.setVisible(true);
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private class compteuranalogiqueplus implements ActionListener {
public void actionPerformed(ActionEvent event){
compteurtanalogique++;
lab11.setText(Integer.toString(compteurtanalogique+compteurtor));
cb.addItem("Voie analogique"+compteurtanalogique); }}

private class compteuranalogiquemoins implements ActionListener {
public void actionPerformed(ActionEvent event){
cb.removeItem("Voie analogique"+compteurtanalogique);
if(compteurtanalogique>0){
compteurtanalogique--;
lab11.setText(Integer.toString(compteurtanalogique+compteurtor));}}}

private class compteurtorplus implements ActionListener {
public void actionPerformed(ActionEvent event) {
compteurtor++;
lab11.setText(Integer.toString(compteurtor+compteurtanalogique));}}

private class compteurtormoins implements ActionListener {
public void actionPerformed(ActionEvent event)
{ if(compteurtor>0){
compteurtor--;
lab11.setText(Integer.toString(compteurtor+compteurtanalogique));}}}


public static void main(String[] args)
{
new fenetre();
}
}
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
26 mars 2013 à 07:19
En fait tu ne veux pas vraiment ajouter plusieurs JLabel, tu veux juste ajouter du texte à un seul JLabel, dans ce cas c'est encore plus simple. Il suffit de récupérer la valeur du JLabel textapercutrame avec getText(), d'ajouter "voie" ou "tor" selon sur quel bouton tu appuies, puis de mettre à jour textapercutrame avec setText()
0
snp3109 Messages postés 77 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 10 juillet 2014 3
26 mars 2013 à 09:04
Effectivement c'était une possibilité. Mais je voulais afficher "voie1" et "tor1" d'une couleur différente donc pour réaliser cela je pense qu'il serai necessaire de créer plusieur Lablel. Toutes les "voie" en vert par exemple, et les "tor" en rouge.
Merci de ton aide.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
26 mars 2013 à 19:21
Tu peux utiliser du texte HTML dans un JLabel, ce qui te permet par exemple de mettre un texte en couleur avec la balise <font> et donc conserver un seul label tout en affichant plusieurs textes de couleurs différentes...

Plusieurs manières de faire :

Soit avec getText/setText brut, mais il faut retirer les balises <html> et </html> avant de faire la concaténation de texte, pour enfin remettre les <html> et </html>

private class compteuranalogiqueplus implements ActionListener 
{ 
    public void actionPerformed(ActionEvent event)
    { 
        compteurtanalogique++; 
        textapercutrame.setText("<html>"+textapercutrame.getText().replaceAll("<[/]?html>", "")+"<font color=\"green\">Voie "+compteurtanalogique+" </font></html>");
        lab11.setText(Integer.toString(compteurtanalogique+compteurtor));
        cb.addItem("Voie analogique"+compteurtanalogique);
    }
} 

private class compteurtorplus implements ActionListener
{ 
    public void actionPerformed(ActionEvent event)
    { 
        compteurtor++; 
        textapercutrame.setText("<html>"+textapercutrame.getText().replaceAll("<[/]?html>", "")+"<font color=\"red\">Tor "+compteurtor+" </font></html>");
        lab11.setText(Integer.toString(compteurtor+compteurtanalogique));
    }
}

Une manière un peu plus propre de faire est de stocker la chaîne de caractères dans un String Builder sans les <html> et </html> qu'on ne rajoute que dans le setText (on n'a donc pas besoin de faire de getText, donc pas besoin d'enlever les <html> et </html> précédents)

private StringBuilder sbapercutrame = new StringBuilder();

private class compteuranalogiqueplus implements ActionListener 
{ 
    public void actionPerformed(ActionEvent event)
    { 
        compteurtanalogique++; 
        sbapercutrame.append("<font color=\"green\">Voie ").append(compteurtanalogique).append(" </font>");
        textapercutrame.setText("<html>"+sbapercutrame+"</html>");
        lab11.setText(Integer.toString(compteurtanalogique+compteurtor));
        cb.addItem("Voie analogique"+compteurtanalogique);
    }
} 

private class compteurtorplus implements ActionListener
{ 
    public void actionPerformed(ActionEvent event)
    { 
        compteurtor++; 
        sbapercutrame.append("<font color=\"red\">Tor ").append(compteurtor).append(" </font>");
        textapercutrame.setText("<html>"+sbapercutrame+"</html>");
        lab11.setText(Integer.toString(compteurtor+compteurtanalogique));
    }
}

Dans ces deux cas on ne conserve qu'un seul label, ce qui est plus simple à gérer qu'une multitude de labels qui s'accumulent.
PS. j'ai augmenté la largeur de textapercutrame pour pouvoir mieux voir :

textapercutrame.setBounds(45,430,190,25); 
0