Variable visible dans les methodes

Résolu
Templier Nocturne Messages postés 7734 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je débute en java, et je n'arrive pas à créer des variables modifiables par les méhodes de la classe.

Voici un extrait de mon code :

public class maClass
{
	private String nbr1 = new String("0"); //ma variable

	public void methode1(JTextField display, char t) //ma methode
	{
		nbr1 += t;		//l'appel de ma variable
	}
	

	public static void main(String[] args)
	{
		JFrame fenetre = new JFrame();
		fenetre.setSize(650, 450);
		fenetre.setVisible(true);
		JPanel pbutton= new JPanel();
		pbutton.setLayout(null);
		pbutton.setBounds(30,50,200,110);
		fenetre.add(pbutton);

		final JTextField display = new JTextField();
		display.setBounds(20,20, 600, 80);
		JButton b1 = new JButton("1");
		b1.setBounds(20, 120, 100, 50);

		b1.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				methode1(display, '1'); // l'appel de ma methode
			}
		});

		pbutton.add(display);
		pbutton.add(b1);

	}

}


Mon problème est le suivant : J'aimerais pouvoir utiliser et modifier nbr1 dans ma methode methode1 de manière à conserver les modifications.
mais :
- si je déclare methode1 static, impossible de modifier nbr1 dedans
- si je ne déclare pas methode 1 static, impossible de l'appeler depuis main

Peut-on m'indiquer une solution s'il vous plait ?

Merci d'avance :)

1 réponse

Templier Nocturne Messages postés 7734 Date d'inscription   Statut Membre Dernière intervention   1 106
 
finalement, j'ai trouvé tout seul : il suffisait de mettre les variables en static :)
1
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

D'un point de vue de la programmation objet, il serait mieux de mettre tout ton code dans la classe et de n'avoir dans ton main que la création d'un objet de cette classe.

Donc a minima, ceci :

public class maClass
{
    private String nbr1 = new String("0"); //ma variable

    public void methode1(JTextField display, char t) //ma methode
    {
        nbr1 += t;        //l'appel de ma variable
    }
    
    public maClass()
    {
        JFrame fenetre = new JFrame();
        fenetre.setSize(650, 450);
        fenetre.setVisible(true);
        JPanel pbutton= new JPanel();
        pbutton.setLayout(null);
        pbutton.setBounds(30,50,200,110);
        fenetre.add(pbutton);

        final JTextField display = new JTextField();
        display.setBounds(20,20, 600, 80);
        JButton b1 = new JButton("1");
        b1.setBounds(20, 120, 100, 50);

        b1.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                methode1(display, '1'); // l'appel de ma methode
            }
        });

        pbutton.add(display);
        pbutton.add(b1);

    }

    public static void main(String[] args)
    {
        new maClass();
    }
}

Même si des constructions comme ceci seraient bienvenue :

public class maClass extends JFrame
{
    private String nbr1 = "0"; //ma variable
    
    private final JTextField display = new JTextField();

    public void methode1(JTextField display, char t) // ma methode
    {
        nbr1 += t; // l'appel de ma variable
    }
    
    public maClass()
    {
        super();
        setSize(650, 450);
        JPanel pbutton = new JPanel();
        pbutton.setLayout(null);
        pbutton.setBounds(30,50,200,110);
        add(pbutton);

        display.setBounds(20,20, 600, 80);
        JButton b1 = new JButton("1");
        b1.setBounds(20, 120, 100, 50);

        /* // avant Java 8
        b1.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                methode1(display, '1'); // l'appel de ma methode
            }
        });
        */
        
        // en Java 8
        b1.addActionListener(() -> methode1(display, '1')); 
        
        pbutton.add(display);
        pbutton.add(b1);

    }

    public static void main(String[] args)
    {
        JFrame frame = new maClass();
        frame.setVisible(true);
    }
}
0