Bom dia pessoal, sou novo aqui no fórum e previamente gostaria de pedir desculpas por qualquer eventual erro na publicação, também ainda estou engatinhando no java e o pouco que consegui fazer foi lendo publicações antigas e desenvolvendo aos poucos. Estou tentando criar um programa de horas extras na empresa onde eu trabalho, ao iniciar o programa pede a quantidade de dias do mês que vão ser trabalhadas e após isso pede a quantidade de horas a serem trabalhadas também. Até ai tudo bem, o programa tem 4 JTextField, onde o usuário irá entrar os dados referente a hora de saída/entrada, fiz um contador no botão de lançamento do dia para que o usuário saiba em que dia parou e não se perca na inserção. Segue o código abaixo.
package view;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import javax.swing.text.MaskFormatter;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
import java.awt.Color;
import java.awt.Font;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class TelaPrincipal extends JFrame {
private JPanel contentPane;
private JTextField txtEntradaManha;
private JTextField txtSaidaManha;
private JTextField txtEntradaTarde;
private JTextField txtSaidaTarde;
int dia, horas;
int fechamentoMesHora = 0;
int fechamentoMesMinutos = 0;
int finalHora = 0;
JButton btnMes = new JButton("Fechar M\u00EAs");
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TelaPrincipal frame = new TelaPrincipal();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
* @throws ParseException
*/
public TelaPrincipal() throws ParseException {
setTitle("Controle de Horas - DisFá");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 500, 330);
contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
panel.setBounds(10, 11, 474, 210);
panel.setBorder(new TitledBorder(null, "FECHAMENTO DI\u00C1RIO", TitledBorder.CENTER, TitledBorder.TOP, null, null));
contentPane.add(panel);
panel.setLayout(null);
MaskFormatter mascaraHora = null;
try {
mascaraHora = new MaskFormatter("##:##");
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
JLabel lblNewLabel = new JLabel();
lblNewLabel.setText("<html><u>Entrada Manhã</u>");
lblNewLabel.setBounds(10, 40, 89, 14);
panel.add(lblNewLabel);
txtEntradaManha = new JFormattedTextField(mascaraHora);
txtEntradaManha.setBounds(101, 34, 62, 20);
panel.add(txtEntradaManha);
txtEntradaManha.setColumns(10);
JLabel lblNewLabel_1 = new JLabel();
lblNewLabel_1.setText("<html><u>Saída Manhã</u>");
lblNewLabel_1.setBounds(270, 40, 81, 14);
panel.add(lblNewLabel_1);
txtSaidaManha = new JFormattedTextField(mascaraHora);
txtSaidaManha.setBounds(361, 34, 62, 20);
panel.add(txtSaidaManha);
txtSaidaManha.setColumns(10);
JLabel lblNewLabel_2 = new JLabel();
lblNewLabel_2.setText("<html><u>Entrada Tarde</u>");
lblNewLabel_2.setBounds(10, 120, 81, 14);
panel.add(lblNewLabel_2);
txtEntradaTarde = new JFormattedTextField(mascaraHora);
txtEntradaTarde.setBounds(101, 114, 62, 20);
panel.add(txtEntradaTarde);
txtEntradaTarde.setColumns(10);
JLabel lblSadaTarde = new JLabel();
lblSadaTarde.setText("<html><u>Saída Tarde</u>");
lblSadaTarde.setBounds(270, 120, 81, 14);
panel.add(lblSadaTarde);
txtSaidaTarde = new JFormattedTextField(mascaraHora);
txtSaidaTarde.setBounds(361, 114, 62, 20);
panel.add(txtSaidaTarde);
txtSaidaTarde.setColumns(10);
JPanel panel_1 = new JPanel();
panel_1.setBackground(Color.WHITE);
panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));
panel_1.setBounds(10, 169, 153, 30);
panel.add(panel_1);
JLabel lblDia2 = new JLabel("Dias Restantes:");
lblDia2.setFont(new Font("Tahoma", Font.BOLD, 11));
panel_1.add(lblDia2);
JLabel lblDia = new JLabel(" ");
lblDia.setBackground(Color.LIGHT_GRAY);
panel_1.add(lblDia);
JButton btnDia = new JButton("Fechar Dia");
btnDia.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat( "HH':'mm" );
Calendar entradaManha = new GregorianCalendar( ) ;
try {
entradaManha.setTime(DATE_FORMAT.parse(txtEntradaManha.getText()));
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Calendar saidaManha = new GregorianCalendar( ) ;
try {
saidaManha.setTime(DATE_FORMAT.parse(txtSaidaManha.getText()));
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Calendar entradaTarde = new GregorianCalendar( ) ;
try {
entradaTarde.setTime(DATE_FORMAT.parse(txtEntradaTarde.getText()));
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Calendar saidaTarde = new GregorianCalendar( ) ;
try {
saidaTarde.setTime(DATE_FORMAT.parse(txtSaidaTarde.getText()));
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
int horasManha = saidaManha.get(Calendar.HOUR_OF_DAY) - entradaManha.get(Calendar.HOUR_OF_DAY);
int minutosManha = saidaManha.get(Calendar.MINUTE) - entradaManha.get( Calendar.MINUTE) ;
if (minutosManha < 0)
{
minutosManha += 60;
horasManha -= 1;
}
int horasTarde = saidaTarde.get(Calendar.HOUR_OF_DAY) - entradaTarde.get(Calendar.HOUR_OF_DAY);
int minutosTarde = saidaTarde.get(Calendar.MINUTE) - entradaTarde.get( Calendar.MINUTE) ;
if (minutosTarde < 0)
{
minutosTarde += 60;
horasTarde -= 1;
}
int totalHoraDia = horasTarde + horasManha;
int totalMinutosDia = minutosTarde + minutosManha;
if (totalMinutosDia >= 60)
{
totalMinutosDia -= 60;
totalHoraDia += 1;
}
fechamentoMesHora = fechamentoMesHora + totalHoraDia;
fechamentoMesMinutos = fechamentoMesMinutos + totalMinutosDia;
if (fechamentoMesMinutos >= 60)
{
fechamentoMesMinutos -= 60;
fechamentoMesHora += 1;
}
dia -= 1;
lblDia.setText(Integer.toString(dia));
if (dia == 0)
{
btnDia.setEnabled(false);
btnMes.setEnabled(true);
}
}
});
btnDia.setBackground(Color.WHITE);
btnDia.setBounds(200, 176, 107, 23);
panel.add(btnDia);
btnMes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
finalHora = fechamentoMesHora - horas;
if ((finalHora < 0) && (fechamentoMesMinutos < 0))
{
JOptionPane.showMessageDialog(null, "O funcionário deve " + (finalHora * -1) + " hora(s) e " + fechamentoMesMinutos +" minuto(s) a empresa!");
}
else if (finalHora == 0)
{
JOptionPane.showMessageDialog(null, "O funcionário não deve e nem tem horas extras!");
}
else
{
JOptionPane.showMessageDialog(null, "O funcionário tem " + (finalHora) + " hora(s) e " + fechamentoMesMinutos + " minuto(s) extras!");
}
/* String horasTrabalhadas = String.format("%02dh%02dmin",fechamentoMesHora, fechamentoMesMinutos);
String mensagem = ("Horas Trabalhadas: " + horasTrabalhadas);
JOptionPane.showMessageDialog(null, mensagem);*/
}
});
btnMes.setBackground(Color.WHITE);
btnMes.setBounds(210, 268, 107, 23);
contentPane.add(btnMes);
dia = Integer.parseInt(JOptionPane.showInputDialog("Digite a Quantidade de dias trabalhados:"));
horas = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de horas a ser cumpridas:"));
btnMes.setEnabled(false);
lblDia.setText(Integer.toString(dia));
}
}
Tem alguma coisa errada, não sei se é em minha lógica ou se eu não soube usar a ferramenta da maneira correta. Peço desculpas se ficou muito vago a explicação do meu problema, se houver qualquer referente a explicação, tentarei explicar melhor. Obrigado desde já.