Ir ao conteúdo

Problema com lógica de lista e função.


LeonardoNarciso

Posts recomendados

Postado

Um amigo pediu pra eu fazer um programinha protótipo para ele, o problema é que tô bem enferrujado e nunca fui muito bem com listas. Nesse caso, não consigo fazer ela exibir os itens que eu cadastro, segue o código:

package NetoCapacetesPACKAGE;

import javax.swing.JOptionPane;

public class Principal {

public static void main(String[] args) {
String nome[]=new String[5];
int fim=0;

menu(fim,nome);

}//main


public static void menu(int f, String n[]){
int opc;
String opçãostring;
int repetir=1;

while(repetir==1){
opçãostring=JOptionPane.showInputDialog("----- NETO CAPACETES -----\n\n\n----- MENU -----\n1 - CADASTRO DE PRODUTOS\n2 - RETIRADA DE PRODUTOS\n3 - ESTOQUE GERAL\n4 - EXIBIR PRODUTOS CADASTRADOS\n9 - SAIR\nDIGITE O NUMERO REFERENTE A OPÇÃO DESEJADA: ");
opc=Integer.parseInt(opçãostring);//pegando a string e convertendo o valor para inteiro.

if(opc==1){
cadastro(f, n);
}//if==1

if(opc==2){
retirada();
}//if==2

if(opc==3){
estoque();
}//if==3

if(opc==4){
exibir(f,n);
}//if==4

opçãostring=JOptionPane.showInputDialog("VOCÊ DESEJA REPETIR OU REFAZER ALGUMA OPERAÇÃO NO MENU?\nDIGITE O NUMERO REFERENTE A OPÇÃO DESEJADA:\n1-SIM\n2-NÃO");
repetir=Integer.parseInt(opçãostring);//pegando a string para refazer a repetição do menu
}//menu
}//whilerepetir

public static void cadastro(int fim, String n[]){

int resposta;
JOptionPane.showMessageDialog(null, "VOCÊ ESCOLHEU: \nCADASTRO DE PRODUTOS!\n\n");


for(int i=0; i<=fim; i++){
fim++;
n[i]=JOptionPane.showInputDialog("Digite o nome do produto numero " +fim+" da lista.");
resposta=JOptionPane.showConfirmDialog(null, "VOCÊ DESEJA CADASTRAR OUTRO PRODUTO?");


if(resposta==JOptionPane.YES_OPTION){
cadastro(fim, n);
}//if


if(resposta==JOptionPane.NO_OPTION){
menu(fim,n);
}//if

}//for

}//cadastro


public static void retirada(){
JOptionPane.showMessageDialog(null, "VOCÊ ESCOLHEU: \nRETIRADA DE PRODUTOS!\n\n");
}//retirada


public static void estoque(){
JOptionPane.showMessageDialog(null, "VOCÊ ESCOLHEU: \nESTOQUE DE PRODUTOS!\n\n");
}//estoque

public static void exibir(int fim, String n[]){
JOptionPane.showMessageDialog(null, "VOCÊ ESCOLHEU: \nEXIBIR PRODUTOS CADASTRADOS!\n\n");

for(int i=fim; i>=0; i--){
System.out.println(n[i]);
fim++;
}//for
}//exibir

}//PRINCIPAL

Agradeço antecipadamente a ajuda!

Postado

Não fique bravo comigo ! Mas achei a lógica de seu programa um pouco confusa e posso explicar o porque e ajuda-lo a melhorar !

Para resolver o problema de seu código atual, seria necessário colocar a variável em um escopo maior, e como você não criou uma classe no main, seria necessário colocar essa variável como STATIC, e eu não recomendaria !


public class Principal {
static String nome[];
public static void main(String[] args) {
....

Nunca fiz um projeto em SWING, mas já fiz em outras linguagens parecidas como C#, vb6, vb.net e acredito que elas seguem a mesma linha !!

1) Não seria necessário fazer loops para forçar o usuário repetir o cadastro como nessa parte.


while (repetir == 1) {
opçãostring = JOptionPane
.showInputDialog("----- NETO CAPACETES -----\n\n\n----- MENU -----\n1 - CADASTRO DE PRODUTOS\n2 - RETIRADA DE PRODUTOS\n3 - ESTOQUE GERAL\n4 - EXIBIR PRODUTOS CADASTRADOS\n9 - SAIR\nDIGITE O NUMERO REFERENTE A OPÇÃO DESEJADA: ");
opc = Integer.parseInt(opçãostring);// pegando a string e
// convertendo o valor para
// inteiro.

if (opc == 1) {
cadastro(f, n);
}// if==1

if (opc == 2) {
retirada();
}// if==2

if (opc == 3) {
estoque();
}// if==3

if (opc == 4) {
exibir(f, n);
}// if==4

opçãostring = JOptionPane
.showInputDialog("VOCÊ DESEJA REPETIR OU REFAZER ALGUMA OPERAÇÃO NO MENU?\nDIGITE O NUMERO REFERENTE A OPÇÃO DESEJADA:\n1-SIM\n2-NÃO");
repetir = Integer.parseInt(opçãostring);// pegando a string para
// refazer a repetição do
// menu
}// menu

Você tendo uma tela fixa já é o suficiente e toda vez que o usuário clicar no botão será executado quantas vezes quiser!


import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;


public class Principal2 extends JFrame {

private JPanel contentPane;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Principal2 frame = new Principal2();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public Principal2() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 314, 159);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);

JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
panel.setLayout(new GridLayout(0, 1, 0, 0));

JButton btnNewButton = new JButton("Cadastrar");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(contentPane, "Abrir tela de listagem");
}
});
panel.add(btnNewButton);

JButton btnListar = new JButton("Listar");
btnListar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(contentPane, "Abrir tela de listagem");
}
});
panel.add(btnListar);
}
}

Se for fazer algo mais profissional, deve seguir a linha dos programas tradicionais, como WORLD, EXCEL, etc... Sistemas em geral que usa um menu para acessar as funcões


import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.AbstractAction;
import java.awt.event.ActionEvent;
import javax.swing.Action;
import javax.swing.JButton;
import java.awt.event.ActionListener;


public class Principal2 extends JFrame {

private JPanel contentPane;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Principal2 frame = new Principal2();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public Principal2() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 314, 159);

JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);

JMenu mnClientes = new JMenu("Clientes");
menuBar.add(mnClientes);

JMenuItem mntmCadastrar = new JMenuItem("Cadastrar");
mntmCadastrar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showInternalMessageDialog(contentPane, "Mostrar tela Cadastro");
}
});
mnClientes.add(mntmCadastrar);

JMenuItem mntmConsultar = new JMenuItem("Consultar");
mntmConsultar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showInternalMessageDialog(contentPane, "Mostrar tela Consulta");
}
});
mnClientes.add(mntmConsultar);

contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
}
}


Agora como usar LISTA etc.. você pode ver um exemplo

http://forum.clubedohardware.com.br/classe-cliente/1003126

E para mostrar na tela usar um jTable

http://forum.clubedohardware.com.br/recuperar-informacao-campo/1000646

Postado

Não se preocupe posso fazer um código comentando linha por linha !! Postei o código para você copiar , rodar e ver o resultado final. Com ele saberei se é isso que procura

Acredito que a minha facilidade com código é devido ao uso do Eclipse, com ele eu arrasto um botão, ou qualquer outro objeto swing, e ele escreve o código para mim!

Acho que primeiro seria interessante te mostrar, com um vídeo, como eu uso o Eclipse, para criar e rodar um código, e também como eu crio uma tela arrastando objetos ! o que acha ? Ou prefere somente que eu comente as linhas do programa acima ?

nos 11 anos que trabalho com programação todas as empresas utilizam o Eclipse, as que usam o netbeans deixaram a opção para Eclipse.

Postado
Não se preocupe posso fazer um código comentando linha por linha !! Postei o código para você copiar , rodar e ver o resultado final. Com ele saberei se é isso que procura

Acredito que a minha facilidade com código é devido ao uso do Eclipse, com ele eu arrasto um botão, ou qualquer outro objeto swing, e ele escreve o código para mim!

Acho que primeiro seria interessante te mostrar, com um vídeo, como eu uso o Eclipse, para criar e rodar um código, e também como eu crio uma tela arrastando objetos ! o que acha ? Ou prefere somente que eu comente as linhas do programa acima ?

nos 11 anos que trabalho com programação todas as empresas utilizam o Eclipse, as que usam o netbeans deixaram a opção para Eclipse.

também estou usando o eclipse para fazer esse código, a princípio ia fazer ele com objetos, o que simplificaria muito o programa, porém a falta de experiência na linguagem nao me ajudou muito, após o reveion eu dou uma olhada bem mais detalhada no seu código, porque esses dias estão uma correria só! OBRIGADO!

Postado

lucasiorio, gostaria se possivel , comentar o que cada linha do seu código faz, tem muita coisa aí que eu nunca nem ouvi falar! abraços!

estou exibindo a lista com o JOptionPane, acontece que com o JOption pane, ela exibe cada iten da lista de uma vez certo? Eu queria saber se tem como exibir tudo em um quadro só, a lista completa em um quadro só.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!