【发布时间】:2015-02-07 00:59:25
【问题描述】:
我已经构建了以下 JDateChooser:
availFromDate = new JDateChooser();
availFromDate.setDateFormatString("dd/MM/yyyy");
JTextFieldDateEditor dateEditor = (JTextFieldDateEditor)availFromDate.getComponent(1);
dateEditor.setHorizontalAlignment(JTextField.RIGHT);
availFromDate.setSize(new Dimension(50, 0));
availFromDate.add(availablefromT);
calendarP.add(availFromDate);
contentPane.add(calendarP);
frame1.add(contentPane);
frame1.setVisible(true);
但是,我需要从 JDateChooser 中选择的日期出现在它所在的 JTextField 中。我意识到必须涉及一个 getDate() 方法,但我不确定如何实现它。
如何获取日期并以 dd/MM/yyyy 格式显示在文本字段中?
编辑:
我在看到建议后尝试了以下方法:
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String date = sdf.format(availFromDate.getDate());
availablefromT.setText(date);
不过,现在我得到了 NullPointerException。有谁知道为什么?似乎关心这个:String date = sdf.format(availFromDate.getDate());
错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.util.Calendar.setTime(Calendar.java:1770)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:943)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936)
at java.text.DateFormat.format(DateFormat.java:345)
at Controller.makeCustEnquiryGUI(Controller.java:2061)
例子:
import com.toedter.calendar.JDateChooser;
import com.toedter.calendar.JTextFieldDateEditor;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import javax.swing.*;
import java.util.*;
public class CalendarTest {
private JFrame chooseCruiseFrame;
private JDateChooser availFromDate;
private JTextField availablefromT;
private JPanel contentPane;
private JPanel centerP;
public static void main(String[] args) {
new CalendarTest();
}
public CalendarTest() {
//////////// Creating Frame
chooseCruiseFrame = new JFrame("");
chooseCruiseFrame.setSize(300, 200);
chooseCruiseFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
chooseCruiseFrame.setVisible(true);
//////////// Creating contentPane
contentPane = new JPanel(new GridLayout(0, 1));
contentPane.setBackground(new java.awt.Color(255, 255, 255));
chooseCruiseFrame.add(contentPane);
chooseCruiseFrame.setVisible(true);
//////////// Creating CenterP
centerP = new JPanel();
centerP.setBackground(new java.awt.Color(255, 255, 255));
contentPane.add(centerP);
chooseCruiseFrame.add(contentPane);
chooseCruiseFrame.setVisible(true);
// Available From Calendar
JLabel availF = new JLabel("Available From:");
centerP.add(availF);
contentPane.add(centerP);
availablefromT = new JTextField(11);
centerP.add(availablefromT);
contentPane.add(centerP);
chooseCruiseFrame.add(contentPane);
chooseCruiseFrame.setVisible(true);
availFromDate = new JDateChooser();
JTextFieldDateEditor dateEditor = (JTextFieldDateEditor) availFromDate.getComponent(1);
dateEditor.setHorizontalAlignment(JTextField.RIGHT);
availFromDate.add(availablefromT);
centerP.add(availFromDate);
contentPane.add(centerP);
chooseCruiseFrame.add(contentPane);
chooseCruiseFrame.setVisible(true);
// Converting Date to String
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
String date = sdf.format(availFromDate.getDate());
availablefromT.setText(date);
}
}
【问题讨论】:
-
查看
DateFormat并在您回复我们之前尝试一下。此外,为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。 -
我的猜测是您首先调用 JDateChooser#getDate 以获取由该字段管理的 Date 对象,然后使用 SimpleDateFormat 将 Date 格式化为您的要求
-
BTW -
availFromDate.setSize(new Dimension(50, 0));0的高度是不合逻辑的。但是然后.. 见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是的。) -
感谢 cmets! @AndrewThompson,我很抱歉,我会确保我将来成为 SSCCE。
-
“不过,现在我得到一个 NullPointerException。有人知道为什么吗?” 没有 runnable example 这表明你的问题可能是任何事情
标签: java swing jdatechooser