Foro sobre Java SE > manejo de fechas y horas
Ya pude mostrar en un textfield la hora actua del sistema, ahora, lo que quiero es que el usuario pueda insertar la hora deseada en otro textfield, pero como hago, para establecer que sea de formato fecha y asi poder guardar ese dato en la bse de datos
Con el JDateChooser resuelves tu primera cuestión:
http://max-server.myftp.org/jcalendar/ibuild/dist/doc/api/
Este componente tiene los listeners necesarios.
Sobre la segunda cuestión, aquí tienes información muy abundante:
http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html
http://docs.oracle.com/javase/7/docs/api/javax/swing/JFormattedTextField.html
http://www.java2s.com/Code/Java/Swing-JFC/Formatted-TextField.htm
Un test de ejemplo, por si te sirve de guía.
import com.toedter.calendar.JDateChooser;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.sql.Date;
import java.text.ParseException;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.text.MaskFormatter;
public class NewJFrame extends javax.swing.JFrame {
private MaskFormatter mask;
public NewJFrame() {
try {
mask = new MaskFormatter("####-##-##");
} catch (ParseException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
mask.setPlaceholderCharacter('_');
initComponents();
jFormattedTextFieldFecha.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String fecha = jFormattedTextFieldFecha.getText();
Date fechaSQL = Date.valueOf(fecha);
System.out.println("fecha SQL: " + fechaSQL);
}
});
jPanelDateChooser.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if ("date".equals(evt.getPropertyName())) {
jTextFieldFechaSeleccionada.setText(Objects.toString(evt.getNewValue()));
}
}
});
}
/** This method is called from within the constructor to
initialize the form.
WARNING: Do NOT modify this code. The content of this method is
always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanelDateChooser = new JDateChooser();
jTextFieldFechaSeleccionada = new javax.swing.JTextField();
jFormattedTextFieldFecha = new javax.swing.JFormattedTextField(mask);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanelDateChooser, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jFormattedTextFieldFecha, javax.swing.GroupLayout.DEFAULT_SIZE, 245, Short.MAX_VALUE)
.addComponent(jTextFieldFechaSeleccionada))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanelDateChooser, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextFieldFechaSeleccionada, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jFormattedTextFieldFecha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jFormattedTextFieldFecha, jPanelDateChooser, jTextFieldFechaSeleccionada});
pack();
}// </editor-fold>
/**
@param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JFormattedTextField jFormattedTextFieldFecha;
private javax.swing.JPanel jPanelDateChooser;
private javax.swing.JTextField jTextFieldFechaSeleccionada;
// End of variables declaration
}
Gracias, por tu ayuda.
Buenas, estoy tratando de ver como funciona JCalendar, para el manejo de turnos, pero como podria hacer, para registrar una fecha que se seleccione en el jcalendar, o directamente, tengo que usar el jdatechooser?
Pasa que quiero hacer que seleccionando una fecha del calendario, en otra parte de la ventana se muestre los horarios y poder asignar esa fecha y hora a un paciente determinado.