【问题标题】:Obtaining date from JDateChooser and displaying it in JTextField从 JDateChooser 获取日期并在 JTextField 中显示
【发布时间】: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


【解决方案1】:

同样的代码在这里工作

   //button    

        private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
        String date = fmt.format(this.txt_data_ini.getDate()); //jdatechooser
        this.teste.setText(date);

    }  

【讨论】:

    【解决方案2】:

    JDateChooser 非常关注 JCalendar.jar v.1.4: 以这种方式获取日期选择器的“SelectedDate”(使用语句创建名为dataEmissioneTextField的JDataChooser对象后):

     Date date = dataEmissioneTextField.getDateEditor().getDate();
    

    如果我们想选择一个带有特定监听器的日期来保存所选日期的值,我们可以这样写:

    dataEmissioneTextField.getDateEditor().addPropertyChangeListener(new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            // TODO Auto-generated method stub
            if ("date".equals(evt.getPropertyName())) {
                //Get the selected date 
                Date date = dataEmissioneTextField.getDateEditor().getDate();
                dataConsegnaTextField.setDate(dataConsegnaTextField.getDateEditor().getDate());
                ordine.setOrderDeliveryDate(date);
                //Draws a Green Border when the date is selected 
                dataEmissioneTextField.setBorder(BorderFactory.createLineBorder(Color.GREEN));
            } else {
                //Draws a Red Border when the date is not selected  
                dataEmissioneTextField.setBorder(BorderFactory.createLineBorder(Color.RED));
            }
        }
    });
    

    请注意,JDateChooser 仅支持 PropertyChangeListener。

    问候。

    【讨论】:

      【解决方案3】:

      你可以这样做

       public void jdatechooserexample() {
         JDateChooser chooser=new JDateChooser();
          JTextField field=new JTextField(15);
             chooser.addPropertyChangeListener("date",new PropertyChangeListener  () { 
           public void propertyChange(PropertyChangeEvent e){
           JDateChooser chooser=(JDateChooser)e.getSource();
            SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
            field.setText(sdf.format(chooser.getDate()));
      
       }
       });
       }
      

      【讨论】:

        【解决方案4】:

        要使用 jCalendar,您可以使用下面的代码。

        String jcalender=calendar.getDate().toString();
        label.setText(jcalender);
        

        【讨论】:

          【解决方案5】:

          好的,所以,你有 JDateChooser 和 JTextField。您将需要一些东西来触发更改,以便该日期变为文本。首先,您需要创建一个新实例,即对象类。当您执行此操作时,调用方法 getData(在 Web 上找到它)并将其存储到您的对象变量中。然后你创建一个新的字符串变量并在那里存储对象。最后,在 JTextField 中显示文本。

          所以代码应该是这样的:

          public Object x;
          public string y;
          x = getData(availFromDate);
          y = x.toString();
          JTextField.setText(y);
          

          如果这不起作用,请尝试:

          y = string.valueOf(availFromDate);
          enter code here
          

          【讨论】:

            【解决方案6】:

            JDateChooser 仅适用于属性更改事件。这可以用来显示Jtextfield中的值

                private void jDateChooser1PropertyChange(java.beans.PropertyChangeEvent evt) { 
                if ("date".equals(evt.getPropertyName())) {
                            //Get Date
                            Date date = jDateChooser1.getDateEditor().getDate();
                            SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy");
            //Define the format of Date
                            String mydate = sf.format(date);
                            jTextField1.setText(mydate);
            
            
                        } else {
                           jTextField1.setText(null);
            
                        }
                }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多