Как выбрать дату, используя JDatePicker в разгаре?
Когда я пытаюсь добавить календарь с помощью JDatePicker, выбранная календарная дата не печатается.
Я в замешательстве, правильно ли выбрана дата календаря. Когда я выбираю дату в календаре, я получаю следующие ошибки.
Подобрал исключение JAVA_TOOL_OPTIONS: -agentlib:jvmhook в потоке "AWT-EventQueue-0" java.lang.NullPointerException в EDACheck.actionPerformed(StudentCheck.java:177) в org.jdatepicker.impl.Jmpate.JPateFan (JP.JPate)) по адресу org.jdatepicker.impl.JDatePanelImpl.access$1800(JDatePanelImpl.java:89) по адресу org.jdatepicker.impl.JDatePanelImpl$InternalController.mousePressed(JDatePanelImpl.java.mawA): unknown))) в java.awt.Component.processMouseEvent(неизвестный источник) в javax.swing.JComponent.processMouseEvent(неизвестный источник) в java.awt.Component.processEvent(неизвестный источник) в java.awt.Container.processEvent(неизвестный источник) в java..awt.Component.dispatchEventImpl(неизвестный источник) в java.awt.Container.dispatchEventImpl(неизвестный источник) в java.awt.Component.dispatchEvent(неизвестный источник) в java.awt.LightweightDispatcher.retargetMouseEvent(неизвестный).LightweightDispatcher.processMouseEvent(Неизвестный источник e) в java.awt.LightweightDispatcher.dispatchEvent(неизвестный источник) в java.awt.Container.dispatchEventImpl(неизвестный источник) в java.awt.Component.dispatchEvent(неизвестный источник) в java.awt.EventQue..isis (неизвестный источник) на java.awt.EventQueue.access$200(неизвестный источник) на java.awt.EventQueue$3.run(неизвестный источник) на java.awt.EventQueue$3.run(неизвестный источник) на java.security.AccessController.doPrivileged(собственный метод)) в java.security.ProtectionDomain$1.doIntersectionPrivilege(неизвестный источник) в java.security.ProtectionDomain$1.doIntersectionPrivilege(неизвестный источник) в java.awt.EventQueue$4.run(неизвестный источник) в java.awt.EventQueue$4.run(Неизвестный источник) в java.security.AccessController.doPrivileged(собственный метод) в java.security.ProtectionDomain$1.doIntersectionPrivilege(Неизвестный источник) в java.awt.EventQueue.dispatchEvent(Неизвестный источник) в java.awt.EventDispOmpEread (Unknown Unknown.EventDispOpEpt (Источник) в java.awt.EventDispatchThread.pumpEventsForFilter (Неизвестно, так urce) в java.awt.EventDispatchThread.pumpEventsForHierarchy (неизвестный источник) в java.awt.EventDispatchThread.pumpEvents (неизвестный источник) в java.awt.EventDispatchThread.pumpEvents (неизвестный источник) в java.awt.Thund (неизвестный источник)
Ниже мой код, что я пробовал,
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
import java.util.Properties;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import org.jdatepicker.JDatePicker;
import org.jdatepicker.impl.JDatePanelImpl;
import org.jdatepicker.impl.JDatePanelImpl;
import org.jdatepicker.impl.JDatePickerImpl;
import org.jdatepicker.impl.UtilCalendarModel;
import org.jdatepicker.impl.UtilDateModel;
public class StudentCheck extends JPanel implements ActionListener {
private JLabel jcomp1;
private JTextField jcomp2;
private JLabel jcomp3;
private JTextField jcomp4;
private JLabel jcomp5;
private JTextField jcomp6;
private JLabel jcomp7;
private JTextField jcomp8;
private JComboBox jcomp9;
private JLabel jcomp10;
private JButton jcomp11;
private JLabel jcomp12;
private JLabel jcomp13;
private JTextField jcomp14;
private JLabel jcomp15;
private JLabel jcomp16;
private JTextField jcomp17;
private JTextField jcomp18;
private JLabel jcomp19;
private JTextField jcomp20;
private JDatePickerImpl datePicker;
public StudentCheck() {
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
//tabbedPane.setBounds(10, 211, 733, 500);
add(tabbedPane);
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
tabbedPane.add("Student Check", panel1);
tabbedPane.addTab("Student Check", null, panel1, null);
tabbedPane.add("Teacher Check", panel2);
tabbedPane.addTab("Teacher Check", null, panel2, null);
//construct preComponents
String[] jcomp9Items = {"maths", "science", "chemistry"};
UtilDateModel model = new UtilDateModel();
//model.setDate(20,04,2014);
// Need this...
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);
// Don't know about the formatter, but there it is...
datePicker = new JDatePickerImpl(datePanel, new DateLabelFormatter());
JButton buttonOK = new JButton("OK");
//construct components
jcomp1 = new JLabel ("Student Number");
jcomp2 = new JTextField (5);
jcomp3 = new JLabel ("Dep Date");
//jcomp4 = new JTextField (5);
jcomp5 = new JLabel (" Dep Status");
jcomp6 = new JTextField (5);
jcomp7 = new JLabel (" Options");
jcomp8 = new JTextField (5);
jcomp9 = new JComboBox (jcomp9Items);
jcomp10 = new JLabel (" platofrms");
jcomp11 = new JButton ("Submit");
jcomp12 = new JLabel (" Student and Teacher Availability Results in EDA");
jcomp13 = new JLabel (" blue flags");
jcomp14 = new JTextField (5);
jcomp15 = new JLabel (" red flags");
jcomp16 = new JLabel ("green flags");
jcomp17 = new JTextField (5);
jcomp18 = new JTextField (5);
jcomp19 = new JLabel (" Last marks");
jcomp20 = new JTextField (5);
datePicker=new JDatePickerImpl(datePanel, null);
panel1.add(datePicker);
panel1.add(buttonOK);
datePicker.addActionListener(this);
buttonOK.addActionListener(this);
jcomp11.addActionListener(this);
jcomp9.addActionListener(this);
//set components properties
jcomp1.setToolTipText ("F");
jcomp16.setToolTipText ("S");
//adjust size and set layout
panel1.setPreferredSize (new Dimension (733, 500));
panel1.setLayout (null);
//add components
panel1.add (jcomp1);
panel1.add (jcomp2);
panel1.add (jcomp3);
//panel1.add (jcomp4);
panel1.add(datePicker);
panel1.add (jcomp5);
panel1.add (jcomp6);
panel1.add (jcomp7);
panel1.add (jcomp8);
panel1.add (jcomp9);
panel1.add (jcomp10);
panel1.add (jcomp11);
panel1.add (jcomp12);
panel1.add (jcomp13);
panel1.add (jcomp14);
panel1.add (jcomp15);
panel1.add (jcomp16);
panel1.add (jcomp17);
panel1.add (jcomp18);
panel1.add (jcomp19);
panel1.add (jcomp20);
//set component bounds (only needed by Absolute Positioning)
jcomp1.setBounds (50, 50, 100, 25);
jcomp2.setBounds (180, 50, 100, 25);
jcomp3.setBounds (340, 50, 100, 25);
//jcomp4.setBounds (455, 50, 125, 25);
jcomp5.setBounds (50, 95, 100, 25);
jcomp6.setBounds (180, 100, 100, 25);
jcomp7.setBounds (320, 100, 100, 25);
jcomp8.setBounds (455, 95, 125, 25);
jcomp9.setBounds (180, 160, 100, 25);
jcomp10.setBounds (45, 160, 100, 25);
jcomp11.setBounds (305, 210, 100, 25);
jcomp12.setBounds (60, 250, 630, 25);
jcomp13.setBounds (30, 290, 120, 25);
jcomp14.setBounds (295, 290, 165, 25);
jcomp15.setBounds (30, 335, 160, 25);
jcomp16.setBounds (25, 370, 185, 30);
jcomp17.setBounds (295, 330, 165, 25);
jcomp18.setBounds (295, 370, 165, 25);
jcomp19.setBounds (25, 410, 210, 25);
jcomp20.setBounds (295, 405, 165, 25);
datePicker.setBounds (455, 50, 125, 25);
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// for UtilDateModel, the value returned is of type java.util.Date
Date selectedDate = (Date) datePicker.getModel().getValue();
System.out.println(selectedDate);
// for UtilCalendarModel, the value returned is of type java.util.Calendar
// Calendar selectedValue = (Calendar) datePicker.getModel().getValue();
// Date selectedDate = selectedValue.getTime();
// for SqlDateModel, the value returned is of type java.sql.Date
// java.sql.Date selectedDate = (java.sql.Date) datePicker.getModel().getValue();
JOptionPane.showMessageDialog(this, "The selected date is " + selectedDate);
//some condtions to connect the database..
//Getting the date from the caldenar in the format as YYYY-MM-DD and pass into the sql query.
}
public static void main (String[] args) {
JFrame frame = new JFrame ("MyPanel");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add (new StudentCheck());
frame.pack();
frame.setVisible (true);
}
}
Тот же код будет вызывать преобразование даты для выбранной даты, используя класс ниже
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.JFormattedTextField.AbstractFormatter;
public class DateLabelFormatter extends 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 "";
}
}
Когда я нажимаю на дату, появляется вышеупомянутая ошибка, но ожидаемый результат - выбранная дата должна быть напечатана в консоли, и она также должна отображаться во всплывающем окне.
Ниже приведена версия банок, которые я использую для этого графического интерфейса,
- JdatePicker1.3.4.jar
- xdb.jar
- ojdbc.jar
- xmlparserv2.jar