public class PanelImporte extends JPanel{
private JLabel lb_importe;
public PanelImporte() {
lb_importe = new JLabel();
setImporte(0d);
lb_importe.setFont(new Font("Verdana", Font.BOLD, 50));
lb_importe.setForeground(Color.BLUE);
add(lb_importe);
setBorder(BorderFactory.createEmptyBorder(30, 0, 10, 0));
}
public void setImporte(double importe) {
lb_importe.setText(String.format("$%.2f", importe));
}
}
public class PanelProgreso extends JPanel{
private JLabel texto;
private JProgressBar barra;
public PanelProgreso() {
texto = new JLabel();
texto.setFont(new Font("Verdana", Font.ITALIC, 25));
setTexto(0d);
barra = new JProgressBar();
barra.setPreferredSize(new Dimension(500, 50));
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel pn_texto = new JPanel();
pn_texto.add(texto);
JPanel pn_barra = new JPanel();
pn_barra.add(barra);
add(pn_texto);
add(pn_barra);
setBorder(BorderFactory.createEmptyBorder(0, 20, 10, 20));
}
private void setTexto(double porc) {
texto.setText(String.format("%2d%s de gasolina cargada", (int)porc, "%"));
}
public void setProgresoMaximo(int litros) {
barra.setMaximum(litros);
barra.setValue(0);
setTexto(barra.getPercentComplete());
}
public void incProgreso() {
int valor = barra.getValue();
valor += 2;
barra.setValue(valor);
setTexto(barra.getPercentComplete() * 100);
}
public int getProgreso() {
return barra.getValue();
}
public boolean terminado() {
return barra.getValue() == barra.getMaximum();
}
}
public class PanelLitros extends JPanel {
private JTextField campo_litros;
public JButton botonStart;
public PanelLitros() {
campo_litros = new JTextField(4);
campo_litros.setFont(new Font("Verdana", Font.PLAIN, 35));
botonStart = new JButton("START");
botonStart.setFont(new Font("Verdana", Font.BOLD, 35));
JLabel texto = new JLabel("Litros de gasolina: ");
texto.setFont(new Font("Verdana", Font.PLAIN, 25));
add(texto);
add(campo_litros);
add(botonStart);
setBorder(BorderFactory.createEmptyBorder(0, 20, 10, 20));
}
public int getLitros() {
try {
return Integer.parseInt(campo_litros.getText());
}
catch(NumberFormatException ex) {
JOptionPane.showMessageDialog(null, "Entrada incorrecta.\nIntroduzca un número entero",
"Cantidad de Litros", JOptionPane.WARNING_MESSAGE);
borraLitros();
return 0;
}
}
public void borraLitros() {
campo_litros.setText(null);
}
}
public class Gasolinera extends JFrame{
PanelImporte pn_importe;
PanelProgreso pn_progreso;
PanelLitros pn_litros;
public Gasolinera() {
pn_importe = new PanelImporte();
pn_progreso = new PanelProgreso();
pn_litros = new PanelLitros();
pn_litros.botonStart.addActionListener(new AccionStart());
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
add(pn_importe);
add(pn_progreso);
add(pn_litros);
setTitle("Surtidor Gasolina");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
class AccionStart implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int litros = pn_litros.getLitros();
if (litros <= 0)
JOptionPane.showMessageDialog(null, "Introduzca un valor entero mayor que 0",
"Cantidad de Litros", JOptionPane.WARNING_MESSAGE);
else {
LLenarTanque llenar = new LLenarTanque(litros);
llenar.start();
}
}
}
class LLenarTanque extends Thread {
private int litros;
public LLenarTanque(int litros) {
this.litros = litros;
}
@Override
public void run() {
pn_litros.botonStart.setEnabled(false);
pn_litros.borraLitros();
pn_progreso.setProgresoMaximo(litros);
pn_importe.setImporte(pn_progreso.getProgreso() * 20d);
while(!pn_progreso.terminado()) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
pn_progreso.incProgreso();
pn_importe.setImporte(pn_progreso.getProgreso() * 20d);
}
JOptionPane.showMessageDialog(null, "Tanque cargado\nGracias por su compra",
"Fin de proceso", JOptionPane.INFORMATION_MESSAGE);
pn_litros.botonStart.setEnabled(true);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Gasolinera();
}
});
}
}