Para agregar un selector de fecha y hora en un proyecto Java Swing utilizando NetBeans, puedes seguir estos pasos:
Paso 1: Configurar el proyecto en NetBeans
- Abre NetBeans y crea un nuevo proyecto Java.
- Añade la biblioteca JDatePicker al proyecto:
- Descarga JDatePicker desde JDatePicker GitHub.
- En NetBeans, haz clic derecho en el proyecto y selecciona
Propiedades
. - Ve a
Bibliotecas
y haz clic enAgregar JAR/Carpeta
. - Selecciona el archivo JAR de JDatePicker y haz clic en
Abrir
.
Paso 2: Crear la interfaz gráfica con NetBeans
- Crea un nuevo JFrame Form:
- Haz clic derecho en el paquete de tu proyecto y selecciona
Nuevo > JFrame Form
.
- Haz clic derecho en el paquete de tu proyecto y selecciona
- Agrega componentes al JFrame:
- Usa el
Palette
en NetBeans para arrastrar y soltar componentes en tu formulario. - Agrega un
JPanel
para contener el selector de fecha y otroJPanel
para el selector de hora.
- Usa el
Paso 3: Implementar el código para los selectores de fecha y hora
Edita el código del JFrame para agregar e inicializar los selectores de fecha y hora. A continuación se muestra un ejemplo completo que puedes adaptar a tu proyecto:
import org.jdatepicker.impl.JDatePanelImpl;
import org.jdatepicker.impl.JDatePickerImpl;
import org.jdatepicker.impl.UtilDateModel;
import javax.swing.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Properties;
public class DateTimePickerForm extends javax.swing.JFrame {
public DateTimePickerForm() {
initComponents();
initDatePicker();
initTimeSpinner();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Date and Time Picker");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 200, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 200, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(50, 50, 50)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(50, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(50, 50, 50)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(50, Short.MAX_VALUE))
);
pack();
}
private void initDatePicker() {
UtilDateModel model = new UtilDateModel();
Properties p = new Properties();
p.put("text.today", "Today");
p.put("text.month", "Month");
p.put("text.year", "Year");
JDatePanelImpl datePanel = new JDatePanelImpl(model, p);
JDatePickerImpl datePicker = new JDatePickerImpl(datePanel, new DateLabelFormatter());
jPanel1.setLayout(new FlowLayout());
jPanel1.add(datePicker);
}
private void initTimeSpinner() {
SpinnerDateModel timeModel = new SpinnerDateModel();
JSpinner timeSpinner = new JSpinner(timeModel);
JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(timeSpinner, "HH:mm:ss");
timeSpinner.setEditor(timeEditor);
jPanel2.setLayout(new FlowLayout());
jPanel2.add(timeSpinner);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new DateTimePickerForm().setVisible(true);
}
});
}
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
class DateLabelFormatter extends JFormattedTextField.AbstractFormatter {
private String datePattern = "yyyy-MM-dd";
private SimpleDateFormat dateFormatter = new SimpleDateFormat(datePattern);
@Override
public Object stringToValue(String text) throws ParseException {
return dateFormatter.parseObject(text);
}
@Override
public String valueToString(Object value) throws ParseException {
if (value != null) {
Calendar cal = (Calendar) value;
return dateFormatter.format(cal.getTime());
}
return "";
}
}
}