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

 Java Discussion :

Modifier un truc genre JLabel situé "ailleurs"?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Par défaut Modifier un truc genre JLabel situé "ailleurs"?
    Je commence à apprendre Java et il y a beaucoup de choses à comprendre dans mes machins-objet !

    Je sais programmer à la manière ancienne et j'ai suivi pas à pas jusqu'à "l'héritage" dans un cours.
    Mon problème est qu'il faut que je sois rapidement capable de comprendre en gros comment ça marche dans une application crédible ... donc forcément graphique

    J'ai donc lancé le wordbuilder: facile ! ça fait (presque tout) tout seul.

    Mon projet pour essayer c'est de faire une petite calculatrice.

    Mais voilà docteur: wordbuiler crée bien le bouton et, miracle, il est facile de créer une fonction à partir de ce bouton. j'ai (il a) donc créé une zone texte
    et aussi une zone JLabel qui me permet de vérifier la valeur de données.
    Très bien mais tout ça c'est dans la partie "private void initialise()"

    Je suppose que c'est cela qui empêche mon JLabel d'être modifié en dehors
    en faisant monLabel.setText("Toto") ? j'ai le message "Cannot refer to a non-final variable labelChiffre1 inside an inner class defined in a different method"
    Dans ce cas, comment accéder aux éléments qui sont initialisés (changer le texte ou la couleur d'un bouton, d'un label...) ?

    Merci

  2. #2
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Le mot clé private indique simplement que la méthode ou l’attribut en question sont disponible uniquement dans la classe qui les définit.

    Ton problème ne vient à mon avis pas de là, mais il me faudrait un peu de code pour pouvoir en dire plus.

    Par contre, si je peux me permettre, si tu débutes il vaudrait surement mieux que tu fasses ça à la main ( rien de bien méchant pour une calculette ) c'est beaucoup plus formateur que d'écrire quelques lignes dans un ActionListener générer automatiquement alors qu'on sait même pas ce que ça représente.

  3. #3
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    Je plussoie totalement la dernière remarque de Nico02, même si tu as une forte contrainte temps tu iras peut être plus vite en faisant quelque chose à la main que tu maîtrise et comprend parfaitement qu'en bidouillant quelque chose de généré bizarrement que tu ne comprends pas du tout...

    La comme ça je dirais que tu es dans une sorte de sous classe listener de ton bouton qui ne connaît pas (ou n'a pas les droits) de modifier quelque-chose de ton panneau racine. Il faudrait passer soit ton label soit le paneau qui le contient au listener du bouton. (ou alors mettre ton label en public mais c'est sale)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Par défaut
    Bon, Ok, il vaudrait mieux que mais je peux pas, je n'ai pas le temps !
    En gros je vous explique: je sais programmer à la façon ancienne (voir mon blog http://motoelectrique.blog4ever.com/ )
    Normalement je suis électronicien mais là, pour un boulot qui doit commencer bientôt, je dois me débrouiller avec Linux, C++ , Java et les processeurs Texas instruments plus quelques autres logiciels que j'espère plus simples.
    Je n'aurai probablement pas à programmer une application complète mais plus à comprendre comment ça marche de façon à trouver des solutions.
    Au pire je suis déjà mort
    Alors je sais bien qu'on ne peut pas faire de miracle mais j'essaie de faire rentrer rapidement des façons d'opérer pratiques/rapides.

    Voilà, merci pour votre compréhension
    Le programme (j'ai enlevé vite fait quelques lignes inutiles puisque je veux juste le principe)

    package graph3;

    import java.awt.*;

    public class Calculatrice {

    private JFrame frame;
    private JTextField zoneInfosOperations;
    private int chiffre1,chiffre2,positionChiffre;
    /**
    * Launch the application.
    */
    public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
    public void run() {
    try {
    Calculatrice window = new Calculatrice();
    window.frame.setVisible(true);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    });
    }

    /**
    * Create the application.
    */
    public Calculatrice() {
    initialize();
    }

    /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
    chiffre1=0;
    chiffre2=0;
    positionChiffre=1; //position du chiffre actuellement affiché

    //la fenêtre
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    //les boutons
    JButton touche1 = new JButton("1");
    touche1.setBounds(41, 202, 65, 23);
    frame.getContentPane().add(touche1);

    (.....)
    //les labels
    JLabel labelChiffre1 = new JLabel("chiffre1");
    labelChiffre1.setBounds(280, 52, 46, 14);
    frame.getContentPane().add(labelChiffre1);

    JLabel labelChiffre2 = new JLabel("chiffre2");
    labelChiffre2.setBounds(280, 68, 46, 14);
    frame.getContentPane().add(labelChiffre2);

    // la zone texte
    zoneInfosOperations = new JTextField();
    zoneInfosOperations.setBounds(44, 31, 209, 89);
    frame.getContentPane().add(zoneInfosOperations);
    zoneInfosOperations.setColumns(10);



    touchePlus.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    switch (positionChiffre)
    {
    case 1:
    chiffre1=Integer.parseInt(zoneInfosOperations.getText());
    //modification du label
    labelChiffre1.setText("hhjhkj");

    positionChiffre=2;
    break; //indique qu'il faut sortir du switch

    case 2:
    chiffre2=Integer.parseInt(zoneInfosOperations.getText());
    positionChiffre=1;
    break; //indique qu'il faut sortir du switch

    default: // indication du cas "else"
    System.out.println("Erreur: position chiffre anormale");
    }

    zoneInfosOperations.setText(""); //efface la zone

    }
    });

    toucheEgal.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    //zoneInfosOperations.setText(""); //efface la zone
    String chaine1="" ;
    chaine1= chaine1.valueOf(chiffre1+chiffre2) ; //on transfère la valeur du résultat dans la chaine
    zoneInfosOperations.setText(chaine1);
    }
    });

    }
    static void effacerZoneOperations()
    //note: pour ajouter une méthode à main il faut déclarer "static"
    {

    }
    }

  5. #5
    Membre éclairé
    Avatar de omar344
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2007
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 287
    Par défaut
    Bonsoir
    Si tu veux bien comprendre le principe voici un topic qui en parle :
    http://stackoverflow.com/questions/1...-in-a-differen

    Si tu veux juste que ton code compile tu as deux solutions :
    * Déclarer la variable locale labelChiffre1 final ,
    * Rendre la variable labelChiffre1 une variable d'instance

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Par défaut
    Merci Omar,
    Je vais regarder ça et prendre la deuxième version

Discussions similaires

  1. Truc genre WshShell.GetCurrentScript ?
    Par Celestus dans le forum VBScript
    Réponses: 2
    Dernier message: 27/05/2008, 10h13
  2. Réponses: 5
    Dernier message: 19/05/2008, 10h31

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