Hinzufügen jdatepicker in jpanel

Ich versuche, fügen Sie jdatepicker in jpanel, dieses jpanel ist aufgerufen, in jframe, das problem ist, dass wenn ich versuche, um jdatepicker direkt in jpanel wird nicht angezeigt, bis einige event ausgeführt wird.

Habe ich versucht diese Lösung, aber das war keine Hilfe. Wenn ich diese auch öffnen eines weiteren Fensters mit keine Daten.

und andere Methode, die ich verwende, ist -

Klasse MainApp, die im frame

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

}

  • Erwägen Sie, einen Blick auf CardLayout und nutzen, wenn die entsprechenden layout-Manager...
  • versuchen schneiden Sie Ihre code, um nur das problem, das Sie haben. Zum Beispiel all die LookAndFeel Zeug ist irrelevant. Seine nur mehr Kopfschmerzen für uns.
  • Auch, passen Sie auf, eine Komponente kann nur befinden sich in einem einzigen container gleichzeitig
  • können wir nicht die Absolute lay-out für das gleiche?
  • Ich habe versucht, mit Hilfe von Karten-layout, aber problem ist immer noch das gleiche, datepicker ist nicht sichtbar, es sei denn, eine Veranstaltung durchgeführt wird.
  • Ich habe schon reduziert den code, Bitte versuchen Sie, führen Sie diesen code in Ihr workspace, können Sie verstehen mein problem. PS: ich werde nach mehr fokussiert code in eine neue Antwort.
  • Das problem ist nicht mit CardLayout es mit einen anderen Teil des Codes
  • Bitte versuchen Sie, diesen code auszuführen, und hoffentlich werden Sie kommen mit einer Lösung für das problem.
  • Sind Sie code ist nicht vollständig, so dass ich nicht laufen kann, können wir nur erraten
  • endlich ist das problem gelöst, danke. Dachte, was ich brauchte. this für mich gearbeitet.

InformationsquelleAutor Akshat | 2014-09-25
Schreibe einen Kommentar