【发布时间】:2017-08-24 18:01:16
【问题描述】:
是否可以从 JFrame 或 JOptionPane 返回一个值,其中我有来自 Flib 的 Jcalendar? JCalendar 需要自己的 Listener 类。我有这个:
org.freixas.jcalendar.JCalendar jd = new org.freixas.jcalendar.JCalendar(org.freixas.jcalendar.JCalendar.DISPLAY_DATE | org.freixas.jcalendar.JCalendar.DISPLAY_TIME,true);
KalendarPanel kalendar = new KalendarPanel();
String message = "Choose start date:\n";
Object[] params = {message, jd};
JOptionPane.showConfirmDialog(null, params, "Start date", JOptionPane.PLAIN_MESSAGE);
但我不知道如何添加 Listener 类以及如何从 JOptionPane 返回值。在 JFrame 中,我可以添加类侦听器,但我不知道如何将值返回给父 JFrame。 JFrame代码:
public class Kalendar extends javax.swing.JFrame {
private Calendar date;
private SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:MM:ss");
private String datum;
public Kalendar() {
initComponents();
jCalendar1.addDateListener(new MyDateListener());
}
/**
* 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() {
jCalendar1 = new org.freixas.jcalendar.JCalendar();
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)
.addComponent(jCalendar1, javax.swing.GroupLayout.PREFERRED_SIZE, 315, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jCalendar1, javax.swing.GroupLayout.PREFERRED_SIZE, 188, javax.swing.GroupLayout.PREFERRED_SIZE)
);
pack();
}// </editor-fold>
// Variables declaration - do not modify
private org.freixas.jcalendar.JCalendar jCalendar1;
// End of variables declaration
class MyDateListener implements DateListener {
@Override
public void dateChanged(DateEvent e) {
datum = sdf.format(e.getSelectedDate().getTime());
}
}
非常感谢。
【问题讨论】: