Dúvida JOpitionPane

13 respostas
R

Pessoal, sou iniciante, por isso não ignorem minha dúvida.

A questão é o seguinte:
Desenvolva um cadastro de Funcionários de uma determinada escola, utilizando ArrayList. Essa escola possui dois tipos de Funcionários:

Professor: possui matrícula, cpf, nome, idade, salário e curso
Técnico administrativo: possui matrícula, cpf, nome, idade, salário e setor
Utilize janelas de diálogo para interagir com o usuário.

Eu já desenvolvi as classes. uma Escola, uma professor que estende escola e outra TécnicoAdministrativo q também estende escola. A dúvida é o seguinte: como será essa entrada de dados, pois conforme entendi, JOpitionPane cria janelas para exibir dados, inserir ou escolher. Como fareis essas entradas?

13 Respostas

Lucas_Camara

Dê uma olhada no método showInputDialog da classe JOptionPane. Chamando esse método, ele irá renderizar uma janela onde o usuário conseguirá informar dados, e esse método retorna os dados informados no formato String.

R

ok lucas, consegui entender o método showImputDialog e os outro métos da classe JOptionPane. o grande problema que se instala na minha cabeça é como irei organizar o projeto. v se vc me entende:

Num projeto apenas com uma classe eu consigo fazer com que a janela surja para o usuario, mas nesse casso, pelo que eu entendi na questão, era pra criar as classes professor, TAdministrativo e uma classe mãe. então nesse casso eu não sei como fazer tudo interagir. seria possível vc me dar um exemplo?

igomes

Porque o professor e o T administrativo estendem a escola ?

R

Como coloquei no inicio da postagem eu sou iniciante, este foi meu raciocínio, pode ser que esteja errado, por isso pedi ajuda: vou postar aqui o que eu fiz:

Criei a classe Escola:

public class Escola {
    private int matricula;
    private String cpf;
    private String None;
    private int idade;
    private double salario;

public Escola(int matricula, String cpf, String None, int idade, double salario) {
    this.matricula = matricula;
    this.cpf = cpf;
    this.None = None;
    this.idade = idade;
    this.salario = salario;
}

public int getMatricula() {
    return matricula;
}

public void setMatricula(int matricula) {
    this.matricula = matricula;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

public String getNone() {
    return None;
}

public void setNone(String None) {
    this.None = None;
}

public int getIdade() {
    return idade;
}

public void setIdade(int idade) {
    this.idade = idade;
}

public double getSalario() {
    return salario;
}

public void setSalario(double salario) {
    this.salario = salario;
}

depois criei a classe professor:

public class Professor extends Escola {

private String curso;

public Professor(int matricula, String cpf, String None, int idade, double salario) {
    super(matricula, cpf, None, idade, salario);
}

public String getCurso() {
    return curso;
}

public void setCurso(String curso) {
    this.curso = curso;
}
}

e por último a classe TécnicoAdminsitrativo

public class TecnicoAdministrativo extends Escola{

public String setor;

public TecnicoAdministrativo(int matricula, String cpf, String None, int idade, double salario) {
    super(matricula, cpf, None, idade, salario);
}

public String getSetor() {
    return setor;
}

public void setSetor(String setor) {
    this.setor = setor;
}

}

daí no programa principal fiquei sem saber o que fazer:

class EscolaAtiv02_4s {

    public static void main(String[] args) {
       
       
    }
    
}
F

@Robson_Elias

Deve existir uma classe Funcionario contendo todos os atributos em comum de Professor e TecnicoAdm, sendo que estas duas estendem (são filhas) sua classe Funcionario.

Quanto as janelas, pesquisa sobre JDialog, pode ser aqui no GUJ mesmo.

Espero ter ajudado =)

F

Só uma ajudinha sobre o extends ,
tente pensar sempre desta forma:

“Professor É UMA Escola?” NÃO!
“Professor É UM Funcionario?” SIM! Opa, o caminho é por aqui.

As coisas podem não fazer muito sentido no começo, quando se está aprendendo, mas logo tudo vai ficar muito claro em sua cabeça. Boa sorte, sucesso!

R

no caso meu código está certo? apenas eu deveria ter criado funcionário no lugar de escola?

Como eu implemento o JopitionPane o programa principal, é possível usar um ArrayList, ou terei que implementar um campo de cada vez?

D

Eu não sei se está certo, só dá para saber se está realmente certo depois de testar e verificar se está tudo funcionando.

Seria melhor estender de Funcionario ao invés de Escola, mas depende do significado de Escola no seu programa. Geralmente uma escola possui uma lista de alunos e de funcionários, portanto um Professor ou TecnicoAdminsitrativo estendido que uma Escola ficaria estranho. Talvez fosse melhor estender de Pessoa.

Sobre o JOptionPane leia a documentação da classe no link abaixo
https://docs.oracle.com/javase/8/docs/api/javax/swing/JOptionPane.html

void main() {
  String nomeProfessor = JOptionPane.showInputDialog(null, "Insira o nome do Professor");
  JOptionPane.showMessageDialog(null, nomeProfessor);
}
R

Pessoal obg pela ajuda. eu entendi que a classe Escola deveria ser Funcionário. mas no programa eu criei com o nome Escola.

No caso, como já esta tudo feito eu posso renomear Escola para Funcionário? pois a classe Escola está funcionando como Funcionário.

Eu consegui fazer o programa principal, pensei numa ideias coloquei no programa e deu certo, ele roda sem problemas aparente. vou postar aqui para ver se vcs tem alguma dica ou dão alguma opinião, pois sou iniciante.

package escolaativ02_4s;


import javax.swing.JOptionPane;

class EscolaAtiv02_4s {

public static void main(String[] args) {
   
   JOptionPane.showMessageDialog(null, "digite 1 para professor e 2 para técnico");
    
   int x = Integer.parseInt(JOptionPane.showInputDialog(null, "escolha entre 1 e 2"));
   
    switch(x)
    {
    case 1:
        JOptionPane.showMessageDialog(null, "cadastra professor");
        Professor professor = new Professor();
      
        professor.setMatricula(Integer.parseInt(JOptionPane.showInputDialog(null, "digite a matrícula")));
        professor.setNone(JOptionPane.showInputDialog(null, "digite o nome do professor"));
        professor.setCpf(JOptionPane.showInputDialog(null, "digite o cpf do professor"));
        professor.setIdade(Integer.parseInt(JOptionPane.showInputDialog(null, "digite a idade do professor")));
        professor.setCurso(JOptionPane.showInputDialog(null, "digite o curso do professor"));
        professor.setSalario(Double.parseDouble(JOptionPane.showInputDialog(null, "digite o salário do professor")));
      
        JOptionPane.showMessageDialog(null, professor.getDados(), "Cadastro Realizado",JOptionPane.INFORMATION_MESSAGE);

        break;
    case 2:
        JOptionPane.showMessageDialog(null, "cadastrar técnico");
        TecnicoAdministrativo ta = new TecnicoAdministrativo();
        ta.setMatricula(Integer.parseInt(JOptionPane.showInputDialog(null, "digite a matrícula")));
        ta.setNone(JOptionPane.showInputDialog(null, "digite o nome do Técnico"));
        ta.setCpf(JOptionPane.showInputDialog(null, "digite o cpf do Técnico"));
        ta.setIdade(Integer.parseInt(JOptionPane.showInputDialog(null, "digite a idade do Técnico")));
        ta.setSetor(JOptionPane.showInputDialog(null, "digite o setor do Técnico"));
        ta.setSalario(Double.parseDouble(JOptionPane.showInputDialog(null, "digite o salário do técnico")));
        JOptionPane.showMessageDialog(null, ta.getDados(), "Cadastro Realizado",JOptionPane.INFORMATION_MESSAGE);
        break;
    default:
        JOptionPane.showMessageDialog(null, "opção inválida");
            
}
  
    
   
        
        
    }
    
}
D

Sim, pode.

Sugestão para melhorar o código, substitua as entradas e saidas com JOptionPane por

public static String inputText(String text) {
    return JOptionPane.showInputDialog(null, text);
}

public static int inputInt(String text) {
    return Integer.parseInt(inputText(text));
}

public static void showMessage(String text, String title) {
    JOptionPane.showMessageDialog(null, text, title,JOptionPane.INFORMATION_MESSAGE);
}
R

Eu pensei também num ArrayList, que poderia ser usado tanto para professor como para tácnico, faria um laço while para perguntar se desejava cadastrar outro professor ou funcionário, mas não consegui desenvolver o código…

Vocês acham que esse raciocínio é lógico?

G

Para fazer isso, você tem que colocar toda a sua estrutura do “switch case” dentro de um while cara entendeu?

Por exemplo:

boolean teste = true;
while(teste)
{
   // você coloca toda a estrutura do seu switch
  //Será obrigatório um switch, que será para sair do sistema e setar a  
  //variável teste como false,  para ele sair do while e encerrar o programa. 
  //Mas enquanto a variável teste for true ele vai ficar perguntando se
  // vc quer continuar a usar o sistema.
}

Entendeu? Qualquer dúvida pode perguntar!

R

Pessoal, recebi estas dicas, se eu conseguisse fazer isso ficaria bem legal. Alguém pode ajudar com mais exemplos.

A questão pede para armazenar os funcionários cadastrados em um ArrayList. A

partir dessa informação

1- falta o arraylist para armazenar os funcionários;

2- falta um laço (while, por exemplo) para possibilitar cadastrar mais de um

funcionário;

3- vejo a repetição de código, por exemplo, setNome deve  implementado

tanto na classe Professor e como na Tecnico administrativo, correto? Outro

trecho que se repete são as chamadas ao método para receber os valores comuns

as duas classes (nome, matrícula, etc) através do JOptionPane. Temos duas

linhas para JOptionPane.showInputDialog(null, digite a matrícula), por

exemplo;

4- aparentemente e como você mencionou, não ficou claro a utilização de

herança ou polimorfismo - seria muito útil, por exemplo, um

ArrayList puderia armazenar tanto objetos Professor como objetos

Técnico Administrativo.
Criado 18 de julho de 2016
Ultima resposta 26 de jul. de 2016
Respostas 13
Participantes 6