@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