2014-09-25 182 views
0

我想在jpanel中添加jdatepicker,這個jpanel在jframe內調用,問題是如果我嘗試直接添加jdatepicker到jpanel中,它不會顯示,直到執行某個事件。在jpanel中添加jdatepicker

我試過this解決方案,但這沒有任何幫助。當我使用它時,它還會打開一個沒有數據的窗口。

和我使用的另一種方法是 -

類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

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

}

+0

jar文件考慮在看看CardLayout和利用在適當佈局管理器... – MadProgrammer 2014-09-25 08:55:56

+0

儘量減少你的代碼只是你遇到的問題。例如,所有LookAndFeel的東西都是不相關的。它更讓我們頭痛。 – 2014-09-25 08:57:50

+2

另外,要小心,一個組件只能在一個容器內駐留一次 – MadProgrammer 2014-09-25 08:58:47

回答

0

這可能會幫助你

請輸入

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

宣言

JDatePickerImpl datePicker; 

添加日期選擇器來的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); 

獲取日期

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

p5_assgnwork是一個JPanel

注:需要日期選擇

+0

我已經導入了jar和包,我面臨的問題是datepicker不會顯示,直到執行某個事件。 – Akshat 2014-09-25 09:40:17