Variable visible dans les methodes

Résolu/Fermé
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 - 21 nov. 2014 à 00:00
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 21 nov. 2014 à 07:39
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 jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 101
21 nov. 2014 à 01:24
finalement, j'ai trouvé tout seul : il suffisait de mettre les variables en static :)
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
21 nov. 2014 à 07:39
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