[RESOLVIDO] Usar variável do swing em outra classe

12 respostas Resolvido
swingjava
roboom

Salve galera!
Eu tenho um projeto onde eu uso o Swing, e eu criei uma segunda classe além da classe da janela Swing.
O que eu preciso é acessar as variáveis da janela Swing nessa segunda classe, mas não está dando certo de jeito nenhum. :confused:

Na classe da Janela eu tenho o campo de declaração de variáveis que é preenchido automaticamente conforme são criadas variáveis na janela (uso NetBeans). Exemplo:
private javax.swing.JComboBox boxDia;

Na classe da Janela eu uso a variável boxDia normalmente, mas na segunda classe não consigo usá-la.
Se eu tento usá-la na segunda classe recebo o erro:
cannot find symbol
symbol: variable boxDia

Pesquisei bastante e tentei algumas coisas, li sobre escopo, mas nesse caso tá foda entender como fazer!
Alguma dica pro iniciante?
Valeu!

12 Respostas

rodriguesabner

Vc só quer pegar os dados da outra combo?

staroski

Objetos trocam mensagem entre si usando métodos.
Então crie métodos nas suas classes para uma poder “conversar” com a outra.

roboom

Quero pegar o valor da JComboBox em uma classe diferente da classe da Janela Swing, mas a variável é privada.

roboom

Valeu staroski, e como eu faria isso? Qual tipo de método?
Acho que tenho que criar um método na classe principal que torne a variável que é privada por padrão em uma variável pública, certo?

V

A sua variável é privada, mas a classe não.
Você não precisa alterar sua variável para pública, pois quem lhe fornecerá o valor será o método que você criar.

Digamos que sua classe chama Teste, para você ter acesso a esta classe dentro de uma outra classe basta você chamar esta classe da seguinte forma.

Teste novoteste = new Teste();

wallacecampanha

Bom dia, amigo.
Para fazer o que o amigo @staroski recomendou, vá na classe que tem as informações desejadas e crie uma função exclusiva para retornar estes valores e deixe esta função como public.

O porque de utilizar um método exclusivo para retornar estes valores, assim você mantêm as informações em PRIVATE e só retorna os valores sem modificações.

F

Seria algo do tipo

public class SegundaClasse {
    public static void main(String[] args) {
        Janela janela = new Janela();
        String valor;
        valor = janela.getComboBoxEtc.getText();
    }
}
roboom

Minha classe principal se chama SelfAware, onde as variáveis privadas estão (boxDia), e minha classe secundária se chama Verifyer, onde eu quero usar as variáveis privadas que estão em SelfAware. Então seguindo seu exemplo o código ficaria:

public class Verifyer {

public static void main(String[] args) {

SelfAware selfaware = new SelfAware();

int boxDia = selfaware.boxDia.getSelectedIndex();

}

}

Porém ainda não dá certo. Aparece o erro: "boxDia has private access in SelfAware"
Certeza que tô perdendo algo simples.

staroski
Solucao aceita

Cria esse método na classe SelfAware:

public int getIndiceSelecionadoNoBoxDia() {
    return boxDia.getSelectedIndex();
}

Aí você pode fazer isso na classe Verifyer:

int indiceSelecionado = selfaware.getIndiceSelecionadoNoBoxDia();
roboom

Eu fiz o código seguindo seu exemplo:

public class SelfAware extends javax.swing.JFrame {
        public int getDia() {
              return (boxDia.getSelectedIndex()+1);
        }

E na classe Verifyer:

public void Verifyer(String[] args) {
        int dia = SelfAware.getDia();
  }

Mas recebo o erro ao chamar o método: "non-static method getDia() cannot be referenced from a static context"
Esso erro diz que a classe Verifyer é estática, mas como pode ver ela não é… estranho :anguished:
Valeu pela mão até então staroski!! Já aprendi como fazer, só esse erro tá no caminho.

staroski

Não, esse erro diz que você está tentando invocar o método getDia de forma estática.

Você escreveu

int dia = SelfAware.getDia();

E deveria ser:

int dia = seuObjetoDoTipoSelfAware.getDia();
roboom

Ooohh pois é meu. Enfim deu certo! Muito obrigado, kudos!

Criado 1 de março de 2018
Ultima resposta 2 de mar. de 2018
Respostas 12
Participantes 6