Bom dia galera, terminei um exercício aqui, e o programa esta quase funcionando de acordo com o pedido, mas ainda faltam algumas coisas.
Mas o problema é que escrevi varias linhas de código, e ainda não sei como estou programando, então to postando o código aqui, e quero que me deem todas as criticas e sugestões, por favor!
Se quiserem posso também postar aqui o exercício e o diagrama de classes.
Quero saber se estou fazendo algo errado principalmente no tratamento de eventos e exceções, que são os ultimos assuntos que estudei.
package carro;
public abstract class Veiculo{
private String placa;
private String condutor;
public Veiculo( String placa, String condutor ){
setPlaca(placa);
setCondutor(condutor);
}
public void setPlaca( String placa ){
this.placa = placa;
}
public String getPlaca(){
return placa;
}
public void setCondutor( String condutor ){
this.condutor = condutor;
}
public String getCondutor(){
return condutor;
}
public abstract boolean abastecer();
}
package posto;
import carro.*;
import javax.swing.JOptionPane;
public abstract class Abastecimento extends Veiculo{
private int quantidadeLitros;
private double valorCombustivel;
public Abastecimento( String placa, String condutor, int quantidadeLitros, double valorCombustivel ){
super( placa, condutor );
setQuantidadeLitros( quantidadeLitros );
setValorCombustivel( valorCombustivel );
}
public void setQuantidadeLitros( int quantidadeLitros ){
this.quantidadeLitros = quantidadeLitros;
}
public int getQuantidadeLitros(){
return quantidadeLitros;
}
public void setValorCombustivel( double valorCombustivel ){
this.valorCombustivel = valorCombustivel;
}
public double getValorCombustivel(){
return valorCombustivel;
}
public static boolean abastecer(){
String escolha = "";
try{
escolha = JOptionPane.showInputDialog( "Deseja abastecer?\nS - sim\nN - não" );
}
catch( NullPointerException e){
System.exit(0);
}
if ( escolha.equals( "s" ) )
return true;
else if ( escolha.equals( "n" ) )
return false;
else
JOptionPane.showMessageDialog( null, "Digite apenas s ou n!" );
return false;
}
public abstract float mostrarTotal();
}
package posto;
public class Alcool extends Abastecimento{
private float desconto = 0.03f;
public Alcool( String placa, String condutor, int quantidadeLitros, double valorCombustivel){
super( placa, condutor, quantidadeLitros, valorCombustivel );
}
public float getDesconto(){
return desconto;
}
public void setDesconto( float desconto ){
this.desconto = desconto;
}
public float mostrarTotal(){
return (float)( ( getQuantidadeLitros() * getValorCombustivel() ) - getDesconto() );
}
}
package posto;
public class Gasolina extends Abastecimento{
public Gasolina( String placa, String condutor, int quantidadeLitros, double valorCombustivel ){
super( placa, condutor, quantidadeLitros, valorCombustivel );
}
public float mostrarTotal() throws ArithmeticException{
return (float)( getQuantidadeLitros() * getValorCombustivel() );
}
}
package layout;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import posto.Abastecimento;
import posto.Alcool;
import posto.Gasolina;
public class PostoLayout extends JFrame{
private JLabel lCondutor, lPlaca, lQtdLitros, lValCombustivel, lTotal;
private JTextField tCondutor, tPlaca, tQtdLitros, tValCombustivel, tTotal;
private JRadioButton rGasolina, rAlcool;
private ButtonGroup bgCombustivel;
private JButton bCadastrar, bExibir;
private JPanel painel;
public PostoLayout(){
super( "Posto" );
painel = new JPanel();
painel = (JPanel) getContentPane();
painel.setLayout( new GridLayout( 7,2 ) );
painel.setFont( new Font( "Times New Roman", Font.ITALIC, 12 ) );
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
this.setResizable( false );
//criação dos itens
lCondutor = new JLabel( "Condutor" );
lPlaca = new JLabel( "Placa" );
lQtdLitros = new JLabel( "Quantidade de litros" );
lValCombustivel = new JLabel( "Valor do combustível" );
lTotal = new JLabel( "Valor total" );
tCondutor = new JTextField( 10 );
tPlaca = new JTextField( 10 );
tQtdLitros = new JTextField( 10 );
tValCombustivel = new JTextField( 10 );
tTotal = new JTextField( 10 );
rGasolina = new JRadioButton( "Gasolina" );
rAlcool = new JRadioButton( "Álcool" );
bgCombustivel = new ButtonGroup();
bgCombustivel.add( rGasolina );
bgCombustivel.add( rAlcool );
bCadastrar = new JButton( "Cadastrar" );
bExibir = new JButton( "Exibir" );
//adicionando os itens ao painel
painel.add( lCondutor );
painel.add( tCondutor );
painel.add( lPlaca );
painel.add( tPlaca );
painel.add( lQtdLitros );
painel.add( tQtdLitros );
painel.add( lValCombustivel );
painel.add( tValCombustivel );
painel.add( rGasolina );
painel.add( rAlcool );
painel.add( lTotal );
painel.add( tTotal );
painel.add( bCadastrar );
painel.add( bExibir );
this.pack();
this.setLocationRelativeTo( null );
Tratamento evento = new Tratamento();
bCadastrar.addActionListener( evento );
bExibir.addActionListener( evento );
}
/*TODO
*resolver a mensagem de dados cadastrados em caso de erro
*acionar o metodo abastecer() ao iniciar o programa
*consertar exibição do resultado no método mostrarTotal()
*limpar os campos de texto ao cadastrar
*/
public class Tratamento implements ActionListener{
private Abastecimento carro;
public void actionPerformed( ActionEvent evento ){
if ( evento.getSource() == bCadastrar ){
String condutor = tCondutor.getText();
String placa = tPlaca.getText();
int quantidadeLitros = 0;
double valorCombustivel = 0;
//boolean erro = true;
try{
quantidadeLitros = Integer.parseInt( tQtdLitros.getText() );
valorCombustivel = Double.parseDouble( tValCombustivel.getText() );
}
catch( NumberFormatException e ){
JOptionPane.showMessageDialog( null, "Devem ser digitados apenas números!" );
}
catch( Exception e ){
JOptionPane.showMessageDialog( null, "ERRO" );
}
if ( rGasolina.isSelected() )
carro = new Gasolina( placa, condutor, quantidadeLitros, valorCombustivel );
else
carro = new Alcool( placa, condutor, quantidadeLitros, valorCombustivel );
tTotal.setText( Double.toString( carro.mostrarTotal() ) );
JOptionPane.showMessageDialog( null, "Dados cadastrados!" );
}//botao cadastrar
else if ( evento.getSource() == bExibir ){
try{
tCondutor.setText( carro.getCondutor() );
tPlaca.setText( carro.getPlaca() );
tQtdLitros.setText( Integer.toString( carro.getQuantidadeLitros() ) );
tValCombustivel.setText( Double.toString( carro.getValorCombustivel() ) );
if ( carro instanceof Alcool )
rAlcool.setSelected(true);
else
rGasolina.setSelected( true );
}
catch(NullPointerException e){
JOptionPane.showMessageDialog( null, "Não há cadastros!" );
}
catch( Exception e ){
JOptionPane.showMessageDialog( null, "ERRO" );
}
}//botao exibir
}//action performed
}//class tratamento
}
package programas;
import layout.PostoLayout;
import posto.Abastecimento;
public class Posto{
public static void main( String args[] ){
PostoLayout janela = new PostoLayout();
janela.setVisible( true );
}
}
Obrigado a quem puder ajudar.