我想在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()));
}
}
jar文件考慮在看看CardLayout和利用在適當佈局管理器... – MadProgrammer 2014-09-25 08:55:56
儘量減少你的代碼只是你遇到的問題。例如,所有LookAndFeel的東西都是不相關的。它更讓我們頭痛。 – 2014-09-25 08:57:50
另外,要小心,一個組件只能在一個容器內駐留一次 – MadProgrammer 2014-09-25 08:58:47