Variable visible dans les methodes

Résolu
Templier Nocturne Messages postés 9989 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
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 :)
A voir également:

1 réponse

Templier Nocturne Messages postés 9989 Statut Membre 1 107
 
finalement, j'ai trouvé tout seul : il suffisait de mettre les variables en static :)
1
KX Messages postés 19031 Statut Modérateur 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