Probleme Label / setText [JAVA]

Résolu/Fermé
zelosien Messages postés 42 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 24 avril 2013 - Modifié par zelosien le 12/04/2012 à 03:39
choubaka Messages postés 39422 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 28 mars 2025 - 13 avril 2012 à 17:59
Bonjour,

J'ai un petit souci, je pose ma question car je planche complètement :(.

Je reprend doucement le java et j'ai un projet ou je doit créer une une calculette (jusque la rien de très compliqué)

J'ai donc un actionListener sur chaque bouton affin que lorsque l'utilisateur clique sur un bouton le texte de celui ci s'affiche dans le label. OR ...

si je clique sur n'importe quel bouton le texte s'affiche mais l'ancien texte reste affiché lui aussi ce qui rend la lecture du label complément impossible pour l'utilisateur.

le code étant encore très cour et pas complexe du tout je me permet de vous poster le code pour écouter vos suggestions :)

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*;  
import java.lang.*; 

public class Main_Frame 
{ 
    public static void main(String[] args) 
    { 
    JFrame jf = new Main("Calculatrice"); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setLocationRelativeTo(null); 
    jf.setSize(400,450); 
    jf.setVisible(true); 
    } 
} 

class Main extends JFrame implements ActionListener 
{ 
 //attribut 
 private JP_Ecran jp_ecran; 
 public JLabel ecran; 
 private JPanel jp_calcule; 
 private String[] tab_string_calcule = {"1", "2", "3", "4", "5", "+", "-", "6", "7", "8", "9", "0", "*", "/", "a", "x", "y", "(", ")", ".", "=", "<-", "C"}; 
    private JButton[] tab_button_calcule = new JButton[tab_string_calcule.length]; 
    private JPanel jp_South; 
 private JPanel jp_option; 
 private String[] tab_string_option = {"Simplifier", "Derivée", "Afficher", "ART", "NPI", "Evaluer" }; 
    private JButton[] tab_button_option = new JButton[tab_string_option.length]; 
    private JPanel jp_evaluer; 
    private JPanel jp_variable; 
    private JTextField variable_a; 
 private JLabel lbl_a = new JLabel("Variable A : "); 
 private JTextField variable_x; 
 private JLabel lbl_x = new JLabel("Variable X : "); 
 private JTextField variable_y; 
 private JLabel lbl_y = new JLabel("Variable Y : "); 
  
 // constructeur 
 public Main(String name) 
 { 
  super(name); 
  initComposant(); 
 } 
  
    private void initComposant() 
 { 
  jp_ecran = new JP_Ecran(); //new GridLayout(1,1) 
   
  Font police = new Font("Arial", Font.BOLD, 20); 
  this.ecran = new JLabel("012345"); 
  this.ecran.setFont(police); 
  this.ecran.setHorizontalAlignment(JLabel.RIGHT); 
  this.ecran.setPreferredSize(new Dimension(350, 50)); 
   
  this.jp_ecran.add(this.ecran); 
   
  this.jp_calcule = new JPanel(); 
  this.jp_South = new JPanel(new BorderLayout()); 
  this.jp_South.setPreferredSize(new Dimension(280, 170)); 
  this.jp_South.setBackground(Color.orange); 
  this.jp_option = new JPanel(); 
  this.jp_evaluer = new JPanel(); 
  this.jp_variable = new JPanel(new GridLayout(3,2)); 
   
  for(int i = 0; i < this.tab_string_calcule.length; i++) 
  { 
   this.tab_button_calcule[i] = new JButton(this.tab_string_calcule[i]); 
   this.tab_button_calcule[i].setPreferredSize(new Dimension(50, 40)); 
   tab_button_calcule[i].addActionListener(this); 
    
   this.jp_calcule.add(this.tab_button_calcule[i]); 
  } 
   
  for(int i = 0; i < this.tab_string_option.length; i++) 
  { 
   this.tab_button_option[i] = new JButton(this.tab_string_option[i]); 
   this.tab_button_option[i].setPreferredSize(new Dimension(120, 40)); 
   tab_button_option[i].addActionListener(this); 
    
   this.jp_option.add(this.tab_button_option[i]); 
  } 
   
  this.variable_a = new JTextField("0", 3); 
  this.jp_variable.add(lbl_a); 
  this.jp_variable.add(variable_a); 
  this.variable_x = new JTextField("0", 3); 
  this.jp_variable.add(lbl_x); 
  this.jp_variable.add(variable_x); 
  this.variable_y = new JTextField("0", 3); 
  this.jp_variable.add(lbl_y); 
  this.jp_variable.add(variable_y); 
   
  this.jp_evaluer.add(this.tab_button_option[this.tab_button_option.length-1]); 
  this.jp_evaluer.add(jp_variable); 
   
  this.jp_South.add(this.jp_evaluer, BorderLayout.SOUTH); 
  this.jp_South.add(this.jp_option, BorderLayout.CENTER); 
   
   
  this.add(jp_ecran,BorderLayout.NORTH); 
  this.add(jp_calcule,BorderLayout.CENTER); 
  this.add(jp_South,BorderLayout.SOUTH); 
 } 
  
 @Override 
 public void actionPerformed(ActionEvent e)  
 { 
   //On affiche le chiffre en plus dans le label 
  String str = ((JButton)e.getSource()).getText(); 
   
  if(!ecran.getText().equals("0")) 
   str = this.ecran.getText() + str; 
      
  this.ecran.setText(str); // <--- PROBLEME ICI :/ 
    } 
} 

class JP_Ecran extends JPanel 
{ 
 public JP_Ecran() 
 { 
  this.setPreferredSize(new Dimension(380, 60)); 
 } 
  
 public void paintComponent(Graphics g) 
 { 
  g.drawRoundRect(7, 5, 380, 50, 10, 10); 
 }                
} 



par avance merci pour vos réponses .

A voir également:

7 réponses

choubaka Messages postés 39422 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 28 mars 2025 2 104
12 avril 2012 à 08:52
Bonjour

Et comme ça ?? ça devrait s'effacer non ?

if(!ecran.getText().equals("0"))
str = this.ecran.getText() + str;
this.ecran.setText("");
this.ecran.setText(str); // <--- PROBLEME ICI :/
}
0
zelosien Messages postés 42 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 24 avril 2013 1
12 avril 2012 à 16:21
J'avais déjà essayé et sa ne change malheureusement rien :/

Je comprend vraiment pas cette erreur ^^'
0
choubaka Messages postés 39422 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 28 mars 2025 2 104
12 avril 2012 à 18:20
le problème est là

str = this.ecran.getText() + str;

tu fais une concaténation de ce qu'il y a déjà...
donc forcément, ça affiche tout
0
zelosien Messages postés 42 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 24 avril 2013 1
12 avril 2012 à 22:25
Non le problème n'est pas que sa affiche tout (car c'est l'écran d'une calculatrice) le problème est que sa affiche par dessus l'ancien texte => "superposé"

exemple:

au démarrage l'écran affiche 12345.

si j'appuie sur le bouton 9

cela va me décalé mon 12345 pour ajouter mon 9 a la fin => 123459
et cela va être superposé a l'ancien texte => 12345

j'aurai donc 2 textes dans 1 label superposé :/

(merci de continué a me répondre car j'ai toujours pas trouvé sur d'autre forum)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zelosien Messages postés 42 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 24 avril 2013 1
13 avril 2012 à 15:49
petit up ?
0
zelosien Messages postés 42 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 24 avril 2013 1
13 avril 2012 à 16:57
Bon voila après 2 semaine J'ai fini par trouver il suffi juste de rajouter :

---> repaint(); <-----

a la fin de mon public void actionPerformed(ActionEvent e) pour que sa marche ^^'

enfin bref merci a toi choubaka pour t'es suggestions qui ont contribué a cette résolution de problème ^^
0
choubaka Messages postés 39422 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 28 mars 2025 2 104
13 avril 2012 à 17:59
content pour toi ..
0