【问题标题】:JDatePicker do not appear on JFrameJDatePicker 不会出现在 JFrame 上
【发布时间】:2015-03-14 00:31:05
【问题描述】:

晚安伙计们,好吧,我正在尝试在我的个人项目中实现JDatePicker 库,我是这个库的初学者,我以前没有使用过它,我一直在阅读一些示例和教程但我没有让这个组件显示在我的 JFrame 中,如果你们能帮助我找到错误,我真的很感激你的帮助:

package Frames;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdatepicker.impl.JDatePanelImpl;
import org.jdatepicker.impl.JDatePickerImpl;
import org.jdatepicker.impl.UtilDateModel;


public class BillForm extends javax.swing.JFrame {

/**
 * Creates new form BillForm
 */
public BillForm() {
    initComponents();
    crearJDatePicker();
}


private void crearJDatePicker (){
    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...
    JDatePickerImpl datePicker = new JDatePickerImpl(datePanel, new DateLabelFormatter());
    this.add(datePicker);
}

private Date getDate(){
    DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
    Date date = new Date();
    try {
        return dateFormat.parse(dateFormat.format(date));
    } catch (ParseException ex) {
        Logger.getLogger(BillForm.class.getName()).log(Level.SEVERE, null, ex);
    }
    return date;
}
public static void main(String args[]) {

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new BillForm().setVisible(true);
        }
    });
}

【问题讨论】:

  • 首先,不要直接使用JDatePickerImpl 的实例,而是使用JDatePicker 对象。你在哪里initComponents 方法?
  • 哦,好的,我要修复关于 JDatePicker 的 JDatePickerImpl 的实例,关于 initComponets 方法,我在将类粘贴到帖子时将其删除,它太大了,但如果你需要它,我可以编辑帖子。
  • 我的立场是正确的,您确实使用了JDatePickerImpl...考虑过JXDatePicker,问题可能出在您的initComponents 方法中

标签: java swing date datepicker


【解决方案1】:

问题出在您的 initComponents 方法中,很可能是使用了 GroupLayout,这是尝试手动管理的最糟糕的布局管理器之一。

更好的选择是开始手动编写布局代码(或者至少将布局管理器更改为更容易更新的东西)

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Properties;
import javax.swing.JFormattedTextField.AbstractFormatter;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import org.jdatepicker.impl.JDatePanelImpl;
import org.jdatepicker.impl.JDatePickerImpl;
import org.jdatepicker.impl.UtilDateModel;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            UtilDateModel model = new UtilDateModel();
            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);
            JDatePickerImpl datePicker = new JDatePickerImpl(datePanel, new DateLabelFormatter());
            setLayout(new GridBagLayout());
            add(datePicker);
        }

    }

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

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-19
    • 2011-04-15
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多