Por Favor, Avaliem meu código?

Boa Noite Pessoal, como vão?? espero que bem!

Desculpem se estou postando essa mensagem numa opção errada. \o/

Sou novo no forum e Iniciante em Java, tem uns 2 meses que estou lendo umas apostilas e o forum de vocês. Li sobre criações graficas e tratamento de eventos (estah me ajudando mto). Então decidi eu criar uma calculadora basica baseada numa que eu sei fazer em C++, usando void’s e depois chamando-os no switch case:

void SOMA() { Instrução }

Então consegui terminar ela (meio suado), estah funcionando perfeitamente, mas ainda falta colocar um IF dentro do IF do botão “dividi” para mostrar um POPUP (JOptionPane) negando uma divisão por ZERO 0. (to suando nisso tambem, mas vou continuar tentando).

Então…vocês que tem muito mais experiência do que eu em JAVA (obviamente), teria como vocês avaliarem meu código??? só para ver se está bem claro e objetivo, se há possibilidades de eu otimiza-lo…etc…???

agradeço a todos por qualquer força!!!

Abraço!

 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calc { //Classe principal

//INICIO - INSTANCIAR OBJETOS
JFrame janela = new JFrame("CALCULADORA JEXPLOITECH");
JPanel container = new JPanel();

JLabel textoindica1 = new JLabel(" Primeiro Valor  :");
JLabel textoindica2 = new JLabel(" Segundo Valor  :");
JLabel textoindica3 = new JLabel(" Resultado  :");

JButton soma = new JButton("S O M A R");
JButton subtrai = new JButton("S U B T R A I R");
JButton multiplica = new JButton("M U L T I P L I C A R");
JButton dividi = new JButton("D I V I D I R");

JTextField campo1 = new JTextField(4);
JTextField campo2 = new JTextField(5);
JTextField campo3 = new JTextField(10);
//FIM - INSTANCIAR OBJETOS

public Calc() { //INICIA CONSTRUTOR DE OBJETOS
janela.getContentPane().add(container);

container.setBackground(Color.black);

container.add(textoindica1);
textoindica1.setForeground(Color.green);
textoindica1.setFont(new Font("Arial", Font. ITALIC, 20));
container.add(campo1);
campo1.setFont(new Font("Arial", Font. BOLD, 20));

container.add(textoindica2);
textoindica2.setForeground(Color.green);
textoindica2.setFont(new Font("Arial", Font. ITALIC, 20));
container.add(campo2);
campo2.setFont(new Font("Arial", Font. BOLD, 20));

container.add(textoindica3);
textoindica3.setForeground(Color.green);
textoindica3.setFont(new Font("Arial", Font. ITALIC, 20));
container.add(campo3);
campo3.setFont(new Font("Arial", Font. BOLD, 25));
campo3.setForeground(Color.red);
campo3.setBackground(Color.green);
campo3.setEditable(false);

container.add(soma);
container.add(subtrai);
container.add(multiplica);
container.add(dividi);

//ADICIONA "LISTENER" PARA OS BOTÕES, E INCLUE NA CLASSE CALCULAR
soma.addActionListener(new calcular());
subtrai.addActionListener(new calcular());
multiplica.addActionListener(new calcular());
dividi.addActionListener(new calcular());

janela.setVisible(true);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setBounds(420,280,400,250);
container.setLayout(new GridLayout(5,5,5,5));//Cria uma Grade no painel/janela, onde: Nlinhas,Ncolunas,espaço vertical, espaço horizontal.
}//FINALIZA CONSTRUTOR DE OBJETOS


//INICIO - CLASSE QUE CRIA AS AÇÕES PARA OS BOTÕES
private class calcular implements ActionListener {
public void actionPerformed(ActionEvent acao) {

String num1, num2;
num1= campo1.getText();
num2= campo2.getText();

if(acao.getSource() == soma){
float resp= Float.parseFloat(num1) + Float.parseFloat(num2);//Converte as variaveis Strings para Float
campo3.setText("" + resp);
}

if(acao.getSource() == subtrai){
float resp= Float.parseFloat(num1) - Float.parseFloat(num2);//Converte as variaveis Strings para Float
campo3.setText("" + resp);
}

if(acao.getSource() == multiplica){
float resp= Float.parseFloat(num1) * Float.parseFloat(num2);//Converte as variaveis Strings para Float
campo3.setText("" + resp);
}

if(acao.getSource() == dividi){
float resp= Float.parseFloat(num1) / Float.parseFloat(num2);//Converte as variaveis Strings para Float
campo3.setText("" + resp);
}

}
}//FIM - CLASSE QUE CRIA AS AÇÕES PARA OS BOTÕES

public static void main(String args[]) { //Função Principal
new Calc();
}
}

Boa Noite Pessoal!

Bom, acabei de criar outra calculadora, tudo na base do PopUP xDhihi!!!

Avaliem por favor???

Abraço!

import javax.swing.*;

public class CalcPopup { //Inicio da Classe Principal

public static void main(String[] args) {

int escolhe;

do
{
JOptionPane.showMessageDialog(null, "CalcPOP-UP v1.0 - JEXPLOITECH - Escolha a operação desejada. Ou digite 5 para SAIR.");
escolhe= Integer.parseInt(JOptionPane.showInputDialog("Digite 1 para Somar. Digite 2 para Subtrair. Digite 3 para Multiplicar. Digite 4 para Dividir."));

if(escolhe == 1) 
{
float n1, n2;
JOptionPane.showMessageDialog(null, "Você Escolheu SOMA.");
n1= Float.parseFloat(JOptionPane.showInputDialog("Entre com o Primeiro Valor : ."));
n2= Float.parseFloat(JOptionPane.showInputDialog("Entre com o Segundo Valor : ."));
JOptionPane.showMessageDialog(null, "O resultado é :  " + (n1+n2));
}
else
{
if(escolhe == 2)
{
float n1, n2;
JOptionPane.showMessageDialog(null, "Você Escolheu SUBTRAÇÃO.");
n1= Float.parseFloat(JOptionPane.showInputDialog("Entre com o Primeiro Valor : ."));
n2= Float.parseFloat(JOptionPane.showInputDialog("Entre com o Segundo Valor : ."));
JOptionPane.showMessageDialog(null, "O resultado é :  " + (n1-n2));
}
else
{
if(escolhe == 3)
{
float n1, n2;
JOptionPane.showMessageDialog(null, "Você Escolheu MULTIPLICAÇÃO.");
n1= Float.parseFloat(JOptionPane.showInputDialog("Entre com o Primeiro Valor : ."));
n2= Float.parseFloat(JOptionPane.showInputDialog("Entre com o Segundo Valor : ."));
JOptionPane.showMessageDialog(null, "O resultado é :  " + (n1*n2));
}
else
{
if(escolhe == 4)
{
float n1, n2;
JOptionPane.showMessageDialog(null, "Você Escolheu DIVISÃO.");
n1= Float.parseFloat(JOptionPane.showInputDialog("Entre com o Primeiro Valor : ."));
n2= Float.parseFloat(JOptionPane.showInputDialog("Entre com o Segundo Valor : ."));

if(n2==0)
{
JOptionPane.showMessageDialog(null,"NÃO EXISTE DIVISÃO POR ZERO.");
}
else 
{
JOptionPane.showMessageDialog(null, "O resultado é :  " + (n1/n2));
}

}
else
{
JOptionPane.showMessageDialog(null, "O Programa será fechado.");
}}}}
}while(escolhe != 5);

}
}//Fim da Classe Principal

Oi,

eu vejo que seu construtor está bem grande heim, com bastante responsabilidade.
Que tal vc pegar esses blocos de código que você separou dentro do construtor e criar métodos para isso?
Outra coisa, não se foi na hora que você colocou no fórum, mas está faltando indentações ai e outra a convenção de nomes de classe é com a primeira letra maiúscula.
Vou deixar o código de uma telinha com algumas funcionalidades, vê o que vc acha:
Perceba como minha classe, feita no curso FJ-16 da Caelum, eestá bem mais organizada e isso é sinônimo de menos dor de cabeça quando alguém for dar manutenção.

package br.com.caelum.argentum.ui;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;

import org.apache.log4j.Logger;


public class ArgentumUI {

	private static final Logger logger = Logger.getLogger(ArgentumUI.class);
	
	private JFrame frame;
	private JPanel panelPrincipal;
	private JTable tabela;
	private JTabbedPane abas;
	
	public static void main(String[] args) {
		new ArgentumUI().montaTela();
	}
		
	public void montaTela() {
		montaJanela();
		montaTitulo();
		montaAbas();
		montaTabela();
		montaBotaoCarregar();
		montaBotaoSair();
		
		mostraJanela();
	}

	private void montaAbas() {
		abas = new JTabbedPane();
		abas.addTab("Tabela de Negócios", null);
		abas.addTab("Gráfico", null);
		panelPrincipal.add(abas);
	}
	
	private void montaTabela() {
		tabela = new JTable();
		tabela.setBorder(new LineBorder(Color.black));
		tabela.setGridColor(Color.black);
		tabela.setShowGrid(true);
		
		JScrollPane ps = new JScrollPane(); 
		ps.getViewport().setBorder(null);
		ps.getViewport().add(tabela); 
		ps.setSize(450, 450);
		
		abas.setTabComponentAt(0, ps);
	}

	private void montaJanela() {
		frame = new JFrame("Argentum");
		frame.setResizable(false);
		frame.setBackground(Color.LIGHT_GRAY);
		
		panelPrincipal = new JPanel();
		frame.add(panelPrincipal);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	private void montaBotaoSair() {
		JButton botaoSair = new JButton("Sair");
		botaoSair.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				logger.info("Botão de sair disparado");
				System.exit(0);
			}
		});
		panelPrincipal.add(botaoSair);
	}

	private void montaBotaoCarregar() {
		JButton botaoCarregar = new JButton("Carregar XML");
		botaoCarregar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				logger.info("Botão de carregar XML disparado");
				new ProcessaXMLWorker(tabela, abas).execute();
			}
		});
		panelPrincipal.add(botaoCarregar);
	}

	private void montaTitulo() {
		JLabel titulo = new JLabel("Lista de Negócios");
		titulo.setFont(new Font("Verdana", Font.BOLD, 25));
		titulo.setForeground(new Color(50, 50, 100));
		titulo.setHorizontalAlignment(SwingConstants.CENTER);
		panelPrincipal.add(titulo);
	}

	private void mostraJanela() {
		frame.pack();
		frame.setSize(540, 540);
		frame.setVisible(true);
	}
	
	
}

Olá Fabio, Boa Tarde!

Então, na verdade eu até tentei usar metodos, mas eu estava fazendo errado, pois nas mensagens de erro da compilação, falava que eu não podia usar um non-static com outro igual, foi mais ou menos assim…

tipo…eu fazia:

public Calc() {

public void Soma() {

}

}

Era por isso que dava erro.

mas agora com seu codigo, jah entendi como se faz…

Realmente o seu código esta super claro, varias funções individuais neh…entendi todas linhas.

mas…tenho uma duvida: Podemos chamar esses “public void’s” de construtores tambem??? ou são chamados de métodos, apenas?

Obrigado mesmo pela ajuda!

Abraço!!!

Pra quem está iniciando Java vc está indo bem cara… Essas duvidas suas são simplesmente questão de conhecimento técnico da Linguagem…

Vc pode usar o Livro Java: Como programar do Deitel como ferramenta de consulta e de aprendizado, e se vc estiver disposto a ler ele do começo ao fim vai ser de grande ajuda…

Abraço!

[quote=Jexploitech]Olá Fabio, Boa Tarde!

Então, na verdade eu até tentei usar metodos, mas eu estava fazendo errado, pois nas mensagens de erro da compilação, falava que eu não podia usar um non-static com outro igual, foi mais ou menos assim…

tipo…eu fazia:

public Calc() {

public void Soma() {

}

}

Era por isso que dava erro.

mas agora com seu codigo, jah entendi como se faz…

Realmente o seu código esta super claro, varias funções individuais neh…entendi todas linhas.

mas…tenho uma duvida: Podemos chamar esses “public void’s” de construtores tambem??? ou são chamados de métodos, apenas?

Obrigado mesmo pela ajuda!

Abraço!!![/quote]

Olá,

construtores não tem retorno e só podem ser chamado uma única vez, no momento da instanciação.
Diferentemente dos métodos que tem retorno(void, int, double, Conta ,…) e podem ser chamados mais de uma vez.
Então construtores não são métodos em hipótese alguma.
Qualquer coisa é só mandar que eu tento ajudar.

Vlw abraços

[quote=Fhilippe Augusto]Pra quem está iniciando Java vc está indo bem cara… Essas duvidas suas são simplesmente questão de conhecimento técnico da Linguagem…

Vc pode usar o Livro Java: Como programar do Deitel como ferramenta de consulta e de aprendizado, e se vc estiver disposto a ler ele do começo ao fim vai ser de grande ajuda…

Abraço![/quote]

Olá Fhilippe, Boa Noite!!!

Poxa isso me deixa tranquilo, ker dizer q estou entendo \o/ (rsrs)!!!

Interessante, tenho essa apostila e parei na pagina 96 até…ela eh realmente mto boa…, preciso termina-la.

Obrigado pela força!!!

Abraço!!!

[quote=fabiolp][quote=Jexploitech]Olá Fabio, Boa Tarde!

Então, na verdade eu até tentei usar metodos, mas eu estava fazendo errado, pois nas mensagens de erro da compilação, falava que eu não podia usar um non-static com outro igual, foi mais ou menos assim…

tipo…eu fazia:

public Calc() {

public void Soma() {

}

}

Era por isso que dava erro.

mas agora com seu codigo, jah entendi como se faz…

Realmente o seu código esta super claro, varias funções individuais neh…entendi todas linhas.

mas…tenho uma duvida: Podemos chamar esses “public void’s” de construtores tambem??? ou são chamados de métodos, apenas?

Obrigado mesmo pela ajuda!

Abraço!!![/quote]

Olá,

construtores não tem retorno e só podem ser chamado uma única vez, no momento da instanciação.
Diferentemente dos métodos que tem retorno(void, int, double, Conta ,…) e podem ser chamados mais de uma vez.
Então construtores não são métodos em hipótese alguma.
Qualquer coisa é só mandar que eu tento ajudar.

Vlw abraços

[/quote]

Olá Fabio, Boa Noite!

então…entendii…eu soh posso usar 1 classe “public class” no meu programa, e o resto todos serao “private void ou public void, mas nunk class neh?” para serem chamados pelo public class, correto?
então o “public class” é o construtor, e os private ou public void’s são os metodos que podem ser usados para varias funções dentro do mesmo corpo do programa, correto?

Detalhe: Com excessão da CalcPopup, irei re-programar a calculadora de acordo com essas suas dicas de public void / private void!..Mas amanhã pq hoje ñ dormi ainda (rsrs), jah jah vou pro sono (rsrs)!

Agradeço a força!

Abraço!!!

Boa Noite (Madrugada) Fabio, Td bom??

Com base no seu código, alterei a minha calculadora, seria possivel você avaliar?? inclusive meus comentarios, pois com os mesmos eu vou “anotando” o que cada parte faz :$, se tiver algo que eu anotei errado, por favor, me corrija xDhihi!!!

Putz eu achei essa forma mtooooo melhoorr…farei somente assim daqui pra frente, agradeço mesmo a ajuda!!!

Percebi que para funcionar é obrigatóriamente necessario declarar as variaveis (private) depois da classe principal, (correto?), e não precisa colocar a classe do ActionListener dentro da função que chama esses métodos, pois eu estava colocando e tava dando erro, ai depois de uma keimas de neuronios, resolvi tirar, e compilou \o/!!!

Segue o código:

Abraço!!!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


  /* Classe Principal */
public class CAlterado {

	/* Declaração das Variaveis */
	private JFrame janela;
	private JPanel container;
	private JLabel textoindica1, textoindica2, textoindica3;
	private JButton soma, subtrai, multiplica, dividi;
	private JTextField campo1, campo2, campo3;

	
	/* Função Principal */
public static void main(String args[]) {

new CAlterado().JPrincipal();
}


/* Função Public que chama todos os Métodos Private's */
public void JPrincipal(){
        montaJanela();
		montaBotoes();
		montaCampos();
		montaTextos();
		alinhaComponentes();
		}


	/*
	 *INICIO DOS METODOS
    */

private void montaJanela(){
	janela = new JFrame("CALCULADORA JEXPLOITECH");
	container = new JPanel();
	janela.setVisible(true);
	janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	janela.setBounds(420,280,400,250);
	janela.getContentPane().add(container);
	container.setBackground(Color.black);
	container.setLayout(new GridLayout(5,5,5,5));/* Cria uma Grade no painel/janela, onde: Nlinhas,Ncolunas,espaço vertical, espaço horizontal. */
	}


private void montaTextos() {
	textoindica1 = new JLabel(" Primeiro Valor  :");
	textoindica2 = new JLabel(" Segundo Valor  :");
	textoindica3 = new JLabel(" Resultado  :");

	textoindica1.setForeground(Color.green);
	textoindica1.setFont(new Font("Arial", Font. ITALIC, 20));

	textoindica2.setForeground(Color.green);
	textoindica2.setFont(new Font("Arial", Font. ITALIC, 20));

	textoindica3.setForeground(Color.green);
	textoindica3.setFont(new Font("Arial", Font. ITALIC, 20));
	}


private void montaBotoes() {
	soma = new JButton("S O M A R");
	subtrai = new JButton("S U B T R A I R");
	multiplica = new JButton("M U L T I P L I C A R");
	dividi = new JButton("D I V I D I R");

    /* Ativa os botões e os adiciona na classe de ações= montaAcoes */
	soma.addActionListener(new montaAcoes()); 
	subtrai.addActionListener(new montaAcoes());
	multiplica.addActionListener(new montaAcoes());
	dividi.addActionListener(new montaAcoes());
	}


private void montaCampos(){
	campo1 = new JTextField(4);
	campo2 = new JTextField(5);
	campo3 = new JTextField(10);

	campo1.setFont(new Font("Arial", Font. BOLD, 20));
	campo2.setFont(new Font("Arial", Font. BOLD, 20));
	campo3.setFont(new Font("Arial", Font. BOLD, 25));

	campo3.setEditable(false);/* Campo que recebe resultado */
	campo3.setForeground(Color.red);/* Cor da Fonte/Letras do Campo3 */
	campo3.setBackground(Color.green);/* Cor do Campo3 */
	}


private void alinhaComponentes(){
	container.add(textoindica1);
	container.add(campo1);
	container.add(textoindica2);
	container.add(campo2);
	container.add(textoindica3);
	container.add(campo3);

	container.add(soma);
	container.add(subtrai);
	container.add(multiplica);
	container.add(dividi);
	}


	/*
	 *FIM DOS METODOS
	 */


	 
/* INICIO - CLASSE = AÇÕES PARA OS BOTÕES */

private class montaAcoes implements ActionListener {

public void actionPerformed(ActionEvent acao) {

        String num1, num2;
        num1= campo1.getText();
        num2= campo2.getText();

if (acao.getSource() == soma){
	float resp= Float.parseFloat(num1) + Float.parseFloat(num2);//Converte as variaveis Strings para Float
	campo3.setText("" + resp);
	}

if (acao.getSource() == subtrai){
	float resp= Float.parseFloat(num1) - Float.parseFloat(num2);//Converte as variaveis Strings para Float
	campo3.setText("" + resp);
	}

if (acao.getSource() == multiplica){
	float resp= Float.parseFloat(num1) * Float.parseFloat(num2);//Converte as variaveis Strings para Float
	campo3.setText("" + resp);
	}	

if (acao.getSource() == dividi){
	float resp= Float.parseFloat(num1) / Float.parseFloat(num2);//Converte as variaveis Strings para Float
	campo3.setText("" + resp);
	}

}

}//FIM - CLASSE = AÇÕES PARA OS BOTÕES


}//Fim da Classe Principal