Instantiated object does not appear in function [duplicate]

1

Hello, I'm creating a Java project using Eclipse with the windowbuilder. Inside this project I own the JFrame with the objects, jbuttons, jtextfields, jformattedtextfields, etc ... I have all these objects in my project. It occurs that when I try to create a function at the beginning of the code to give actions on these objects, these objects do not appear in the functions. It's as if they did not exist. I can not create functions, methods, actions for these objects because they do not appear in the functions. Does anyone know why this happens ...?

Here are the instantiated objects:

        JTextPane PEQuestion = new JTextPane();
        PEQuestion.setText("1) Ao fazer compras no supermercado:");
        PEQuestion.setBounds(10, 280, 599, 48);
        Question.add(PEQuestion);

JTextPane peTextA = new JTextPane();
        peTextA.setText("A) Compro tudo que tenho vontade, sem prestar aten\u00E7\u00E3o no pre\u00E7o, na marca ou na embalagem;");
        peTextA.setBounds(34, 339, 540, 48);
        Question.add(peTextA);

        JTextPane peTextB = new JTextPane();
        peTextB.setText("B) Uso apenas o pre\u00E7o como crit\u00E9rio de escolha;");
        peTextB.setBounds(34, 395, 540, 48);
        Question.add(peTextB);

    JTextPane peTextC = new JTextPane();
    peTextC.setText("C) Presto aten\u00E7\u00E3o se os produtos de uma determinada marca s\u00E3o ligados a alguma empresa que n\u00E3o respeita o meio ambiente ou quest\u00F5es sociais;");
    peTextC.setBounds(34, 449, 540, 48);
    Question.add(peTextC);

    JTextPane peTextD = new JTextPane();
    peTextD.setText("D) Procuro considerar pre\u00E7o e qualidade, al\u00E9m de escolher produtos que venham em embalagens recicl\u00E1veis e que respeitem crit\u00E9rios ambientais e sociais.");
    peTextD.setBounds(34, 504, 540, 48);
    Question.add(peTextD);

And here are the functions that I try to create with the objects (at the beginning of the class), and that do not identify the objects:

public void mudarTexto()

{
    PEQuestion.setText("2) Entre os alimentos que normalmente você consome, que quantidade é pré-preparada, embalada ou importada?");
    peTextA.setText("A) Quase todos;");
    peTextB.setText("B) Metade;");
    peTextC.setText("C) Um quarto;");
    peTextD.setText("D) Muito poucos. A maior parte dos alimentos que consumo não é pré-preparada nem embalada, tem origem orgânica e é produzida na região onde vivo.");
    PEImg.setIcon(new ImageIcon(mainView.class.getResource("/peImages/02.png")));
}

The error that appears is:

  

PEQuestion can not be resolved

     

peTextA can not be resolved

     

peTextB can not be resolved

     

peTextC can not be resolved

     

peTextD can not be resolved

Thank you.

    
asked by anonymous 01.06.2018 / 17:37

2 answers

1

You have a scope problem. When you declare new variables in a method, they only belong to that method. If you want a variable to be accessed by all methods of a class, you have to declare (if you want you can also initialize) it in the body of the class, outside the methods. In your case, you might be wanting something like this:

public class MinhaClasse {

    // Variáveis declaradas no escopo da classe podem 
    // ser acessadas em qualquer método
    JTextPane peQuestion = new JTextPane(); //Nome de variável deve ser CamelCase
    JTextPane peTextA = new JTextPane();
    JTextPane peTextB = new JTextPane();
    JTextPane peTextC = new JTextPane();
    JTextPane peTextD = new JTextPane();

    public MinhaClasse() {

        // As variáveis usadas aqui são as que pertencem a classe
        peQuestion.setText("1) Ao fazer compras no supermercado:");
        peQuestion.setBounds(10, 280, 599, 48); Question.add(peQuestion);

        peTextA.setText("A) Compro tudo que tenho vontade, sem prestar aten\u00E7\u00E3o no pre\u00E7o, na marca ou na embalagem;");
        peTextA.setBounds(34, 339, 540, 48); Question.add(peTextA);

        peTextB.setText("B) Uso apenas o pre\u00E7o como crit\u00E9rio de escolha;");
        peTextB.setBounds(34, 395, 540, 48); Question.add(peTextB);

        peTextC.setText("C) Presto aten\u00E7\u00E3o se os produtos de uma determinada marca s\u00E3o ligados a alguma empresa que n\u00E3o respeita o meio ambiente ou quest\u00F5es sociais;");
        peTextC.setBounds(34, 449, 540, 48); Question.add(peTextC);

        peTextD.setText("D) Procuro considerar pre\u00E7o e qualidade, al\u00E9m de escolher produtos que venham em embalagens recicl\u00E1veis e que respeitem crit\u00E9rios ambientais e sociais.");
        peTextD.setBounds(34, 504, 540, 48);
        Question.add(peTextD);
    }

    public void mudarTexto() {

        // As variáveis usadas aqui são as que pertencem a classe
        peQuestion.setText("2) Entre os alimentos que normalmente você consome, que quantidade é pré-preparada, embalada ou importada?");
        peTextA.setText("A) Quase todos;");
        peTextB.setText("B) Metade;");
        peTextC.setText("C) Um quarto;");
        peTextD.setText("D) Muito poucos. A maior parte dos alimentos que consumo não é pré-preparada nem embalada, tem origem orgânica e é produzida na região onde vivo.");
        PEImg.setIcon(new ImageIcon(mainView.class.getResource("/peImages/02.png")));
    }

    //Exemplo de acesso de variáveis em determinados escopos
    public void outroEscopo() {

         JTextPane peTextA = new JTextPane();
         peTextA.setText("Eu pertenço APENAS ao escopo desse método");

         // Se você tiver em um método alguma variável com o mesmo
         // nome de alguma variável que pertença ao escopo da classe
         // basta usar o THIS para acessar a variável da classe

         this.peTextA.setText("Eu pertenço ao escopo da classe");
    }
}

Note: Keep an eye on IDE messages, because unless you have no linter configured, IDE always warns you about these types of scope problems before you even compile the code.

    
01.06.2018 / 18:14
0

If you declare

class MinhaClasse
{
    public void MinhaOperacao(int meuParametro)
    {
        if (meuParametro % 2 == 0)
        {
            JTextPane PEQuestion = new JTextPane();
        }

        PEQuestion.setText("teste 1");
    }
}

It will make the same mistake. Because? Because PEQuestion was not declared in the scope of the PEQuestion.setText("teste 1"); line.

What to do?

If you want to use PEQuestion throughout the class, just declare it in the class scope,

class MinhaClasse
{
    private JTextPane PEQuestion;

    public MinhaClasse()
    {
        PEQuestion = new JTextPane();
    }

    public void MinhaOperacao(int meuParametro)
    {
        if (meuParametro % 2 == 0)
        {
            PEQuestion.setText("teste 2");
        }
    }
}
    
01.06.2018 / 18:05