java 在 jpanel 中添加 jdatepicker

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26034298/
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-11-02 09:10:46  来源:igfitidea点击:

Add jdatepicker in jpanel

javaswingdatepickerjpanel

提问by Akshat

I am trying to add jdatepicker in jpanel, this jpanel is called inside jframe, the problem is that if I try to add jdatepicker directly into jpanel it is not displayed, until some event is performed.

我试图在 jpanel 中添加 jdatepicker,这个 jpanel 在 jframe 中被调用,问题是如果我尝试将 jdatepicker 直接添加到 jpanel 中,它不会显示,直到执行某些事件。

I have tried thissolution, but this was of no help. When I use this it also open one more window with no data.

我试过这个解决方案,但这没有帮助。当我使用它时,它还会打开一个没有数据的窗口。

and other method I am using is -

我正在使用的其他方法是 -

Class MainApp which is using frame

使用框架的类 MainApp

public class MainApp extends JFrame implements ActionListener {

private JPanel panel;

private JMenuBar m_menuBar;
private JMenu m_menuSales;

private JMenuItem m_itmSalesNewBuisness;
private JMenuItem m_itmSalesAppointments;

private static MainApp instance = null;

public static MainApp getInstance() {
    if(instance == null) {
        instance = new MainApp();
    }

    return instance;
}

private MainApp() {
    initComponents();
}

private void initComponents() {
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    m_menuBar = new JMenuBar();
    m_menuSales = new JMenu("Sales");
    m_itmSalesAppointments = new JMenuItem("Appointments");
    m_itmSalesAppointments.addActionListener(this);
    m_itmSalesNewBuisness = new JMenuItem("New Business");
    m_itmSalesNewBuisness.addActionListener(this);

    m_menuBar.add(m_menuSales);
    setJMenuBar(m_menuBar);

    setSize(1300, 700);
    setVisible(true);
}

public static void main(String[] args) {
    try {
        UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
    } catch (UnsupportedLookAndFeelException ex) {
        ex.printStackTrace();
    } catch (IllegalAccessException ex) {
        ex.printStackTrace();
    } catch (InstantiationException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }
    UIManager.put("swing.boldMetal", Boolean.FALSE);

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new MainApp();
        }
    });
}

@Override
public void actionPerformed(ActionEvent e) {
    if(m_itmSalesNewBuisness == e.getSource()){
        if(panel != null) {
            remove(panel);
            invalidate();
        }
        revalidate();
        repaint();
        panel = new CopyOfNewBusiness();
        panel.setBounds(0, 0, getWidth(), getHeight());
        add(panel);
    } else if(m_itmSalesAppointments == e.getSource()){
        if(panel != null) {
            remove(panel);
            invalidate();
        }
        revalidate();
        repaint();
        panel = new AppointmentTracker();
        panel.setBounds(0, 0, getWidth(), getHeight());
        add(panel);
    }
}

public JDatePickerImpl setDatePicker() {
    UtilDateModel model = new UtilDateModel();
    model.setSelected(true);
    JDatePanelImpl datePanel = new JDatePanelImpl(model);
    JDatePickerImpl datePicker = new JDatePickerImpl(datePanel, new DateLabelFormatter());
    return datePicker;      
}

NewBusiness.java

新业务.java

public class CopyOfNewBusiness extends JPanel implements ActionListener, ItemListener {

private JLabel m_lblDate;
private JDatePickerImpl m_dtpDate;

private JLabel m_lblFollowUpDate;
private UtilDateModel followUpDateModel;
private JDatePanelImpl followUpDatePanel;
private JDatePickerImpl m_dtpFollowUp;

public CopyOfNewBusiness() {
    initComponents();
}

private void initComponents() {
    setLayout(null);

    m_lblDate = new JLabel("Date");
    m_lblDate.setBounds(10, 10, 100, 30);
    add(m_lblDate);

    m_dtpDate = MainApp.getInstance().setDatePicker();
    m_dtpDate.setBounds(120, 10, 120, 30);
    add(m_dtpDate);

    m_lblFollowUpDate = new JLabel("Follow Up Date");
    m_lblFollowUpDate.setBounds(10, 370, 100, 30);
    add(m_lblFollowUpDate);

    followUpDateModel = new UtilDateModel();
    followUpDatePanel = new JDatePanelImpl(followUpDateModel);
    m_dtpFollowUp = new JDatePickerImpl(followUpDatePanel);
    m_dtpFollowUp.setBounds(120, 370, 120, 30);
    add(m_dtpFollowUp);

    setPreferredSize(new Dimension(getWidth(), getHeight()));
}

}

}

回答by Anptk

This may help you

这可能会帮助你

please import

请导入

    import java.util.Date; 
    import net.sourceforge.jdatepicker.impl.JDatePanelImpl;
    import net.sourceforge.jdatepicker.impl.JDatePickerImpl;
    import net.sourceforge.jdatepicker.impl.UtilDateModel;

Declaration

宣言

    JDatePickerImpl datePicker;

Adding Datepicker to JPanel

将日期选择器添加到 JPanel

      JLabel l22=new JLabel("DATE :");
      l22.setBounds(100,350,100,20);
      p5_assgn_work.add(l22);

      UtilDateModel model=new UtilDateModel();
      JDatePanelImpl datePanel = new JDatePanelImpl(model);
      datePicker = new JDatePickerImpl(datePanel);
      datePicker.setBounds(220,350,120,30);
      p5_assgn_work.add(datePicker);

To get Date

获取日期

            Date selectedDate = (Date) datePicker.getModel().getValue();
            String date=selectedDate+"";

p5_assgnwork is a JPanel

p5_assgnwork 是一个 JPanel

NB: jar file needed for datepicker

注意:datepicker 需要 jar 文件