Java 从 JDateChooser 获取日期并将其显示在 JTextField 中

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/28377318/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 06:07:08  来源:igfitidea点击:

Obtaining date from JDateChooser and displaying it in JTextField

javaswingjdatechooser

提问by Freddy

I have constructed the following JDateChooser:

我构建了以下 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);

However, I need the date selected from the JDateChooser to appear in the JTextField it is being held in. I realise there must be a getDate() method involved, though I am not sure how to implement it.

但是,我需要从 JDateChooser 中选择的日期出现在它所在的 JTextField 中。我意识到必须涉及 getDate() 方法,但我不确定如何实现它。

How do I obtain the date and display it within the textfield in the format of dd/MM/yyyy?

如何获取日期并将其以 dd/MM/yyyy 格式显示在文本字段中?

Edit:

编辑:

I have tried the following after seeing suggestions:

看到建议后,我尝试了以下方法:

  SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
  String date = sdf.format(availFromDate.getDate());
  availablefromT.setText(date);

Though, now I am getting a NullPointerException. Anyone know why? It seems to concern this: String date = sdf.format(availFromDate.getDate());

不过,现在我收到了 NullPointerException。有谁知道为什么?似乎与此有关:String date = sdf.format(availFromDate.getDate());

The Error(s):

错误:

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)

Example:

例子:

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);
    }
}

采纳答案by Fernando

the same code works here

相同的代码在这里工作

   //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);

    }  

回答by Vulovic Vukasin

Ok,so,you have JDateChooser and JTextField. You will need something to trigger the change,so that date would go to text. First of all, you need to create a new instance that is object class. When you do this,call method getData(find it on the web) and store it into your object variable. Then you create new variable that is string and store object there. And last,show text in JTextField.

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

So the code should look like this:

所以代码应该是这样的:

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

If this doesnt work, try :

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

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

回答by Deepak Singh

you can do like

你可以喜欢

 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()));

 }
 });
 }

回答by Sanjeet Biswas

To use jCalendar, you can use the code below.

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

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

回答by Marcello Marino

great attention for JDateChooser into JCalendar.jar v.1.4: Getting the "SelectedDate" of the Date picker in this way (after using a statement to create an JDataChooser object named dataEmissioneTextField):

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

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

In the case we want to choose a date with a specific listener to save the value of the selected date we can write as follows:

如果我们想选择具有特定侦听器的日期来保存所选日期的值,我们可以编写如下:

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));
        }
    }
});

Note that the JDateChoosersupports just a PropertyChangeListener.

请注意,JDateChooser仅支持一个PropertyChangeListener.

Regards.

问候。

回答by Shivam aggarwal

JDateChooser Only works with Property change event. This can be used to display the value in Jtextfield

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);

            }
    }