Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33093

Alterar valor de array de dentro de uma classe interna

$
0
0

@Vinnicius escreveu:

Olá pessoal Estou começando a estudar Java. Já li muito sobre programação orientada a objetos, tenho o famoso livro "Como Programar em Java" e atualmente estou exercitando Interfaces Gráficas à mão.

Estou enfrentando uma dificuldade, e eu acredito que esteja relacionado a conhecimentos básicos (talvez eu tenha pulado alguns degraus na curva de aprendizado). Passagem de parâmetros ou então encapsulamento.

Para vocês entenderem, meu programa tem três classes: Principal, Tela e Aluno.

1) A Classe Principal contem o "main", o qual inicializa um vetor alunos[], no qual ficarão armazenados todos os alunos;

2) A Classe Tela (JFrame) onde há um construtor que desenha os componentes e uma classe interna que trata dos eventos.

3) A Classe Aluno com os atributos, construtor(es) e métodos set e get.

Como eu estou fazendo:
Para eu conseguir alterar o array alunos[] através da Classe "Tela", eu precisei enviar o array alunos[] como parâmetro para o construtor da Classe "Tela", tendo dentro de "Tela" outro array idêntico a alunos[] para receber. Não consegui acessar o vetor criado em "main".

E esse array idêntico (que falei logo acima) não está sendo acessível pela classe interna que trata dos eventos de "Tela". Para isso fiz o mesmo procedimento: enviei o vetor idêntico como parâmetro (na criação do objeto handler) ao construtor da classe interna.

O que eu achei estranho é que as variáveis que armazenam (ou identificam) os JLabel e JTextField estão acessíveis pela classe interna, MAS as outras variáveis e vetores não. Independentemente de estarem public ou private (ou protected se for o caso).

Eu acho um retrabalho imenso passar vetores como parâmetro toda vez que tenho armazenar dados em alunos[]. Sendo que na verdade eu não estou conseguindo alterar alunos[], somente os vetores idênticos, em princípio.

O programa tem 1 (uma) janela simples, com um JLabel "Nome do Aluno" e um JTextField que receberá o nome pelo usuário - sendo os dois componentes dentro de um JPanel.
E também um botão que irá cadastrar o aluno, ou seja, salvar os dados do JTextField do vetor alunos[] da classe Principal.

Sinto que não estou fazendo do jeito certo, mas não consigo encontrar solução. Eu queria poder acessar diretamente o vetor alunos[] da classe Main.

É possível?

Veja:

1) Classe Principal:

public class Programa {

public void main (String args[]) {
Aluno alunos[] = new Aluno[1000];
Tela tela= new Tela(alunos);
tela.setVisible(true);
}
}

2) Classe Tela (resumida)

public class Tela extends JFrame {
public Aluno a[] = new Aluno[1000];

public Tela(Aluno aRecebido[]) {
// lalala...

Handle ouvido = new Handle(a); // veja que aqui eu mandei o vetor como parametro
botaoConfirmar.addActionListener(ouvido);
}

// classe interna
public class Handle implements ActionListener {
// vetor q vai receber
public Aluno a[] = new Aluno[1000];

//construtor
public Handle(Alunos alunos[]) {
// seta pra poder usar...
for (int k = 0; k < a.length ; k++) {
this.a[k] = alunos[k];
}
}

// tratamento do evento
public void actionPerformed(ActionEvent e ) {
// acontece a efetivação do cadastro, ou seja, salvar no vetor alunos[] lá da classe principal.
// porém só consigo alterar o array da classe interna.... AQUI ESTÁ A DÚVIDA- POR QUÊ?
}

}

Obrigado! Tentei demonstrar minha dúvida, espero que esteja fácil de entender. Primeiro tópico.

Mensagens: 3

Participantes: 2

Ler tópico completo


Viewing all articles
Browse latest Browse all 33093


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>