2014-11-07 7 views
12

Sto lavorando con l'ultima versione 1.3.4 di JDatePicker. Come dovrebbe essere implementato?Come implementare JDatePicker

Viene visualizzato un errore del compilatore: Il costruttore JDatePanelImpl (UtilDateModel) non è definito. La soluzione suggerita è: aggiungere argomenti per abbinare JDatePanelImpl (DateModel, Properties). Cosa dovrebbe essere passato come argomento delle proprietà?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.sql.*; 
import java.util.*; 
import java.util.Calendar; 
import java.util.Date; 
import org.jdatepicker.impl.*; 
import org.jdatepicker.util.*; 
import org.jdatepicker.*; 

    //import org.jdatepicker.graphics.*; 
class date2 { 

    void GUI() { 
     JFrame f1 = new JFrame(); 
     f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f1.setSize(300, 300); 
     f1.setVisible(true); 

     Container conn = f1.getContentPane(); 
     conn.setLayout(null); 

     UtilDateModel model = new UtilDateModel(); 
     //model.setDate(20,04,2014); 
     JDatePanelImpl datePanel = new JDatePanelImpl(model); 
     JDatePickerImpl datePicker = new JDatePickerImpl(datePanel); 
     f1.add(datePicker); 

    } 

} 

... Runner ...

class testDate2 { 

    public void main(String[] args) { 

     date2 d1 = new date2(); 
     d1.GUI(); 

    } 

} 
+1

Vedere questo -> 'conn.setLayout (null);' <- Questo essere cattivo, non farlo. Evita di usare i layout 'null', i layout pixel perfetti sono un'illusione nel design dell'interfaccia utente moderno. Ci sono troppi fattori che influenzano la dimensione individuale dei componenti, nessuno dei quali è possibile controllare. Swing è stato progettato per funzionare con i gestori di layout al centro, scartando questi elementi porteranno a non finire problemi e problemi che impiegherete sempre più a provare a correggere – MadProgrammer

+1

E vedere [Perché è corrucciato per usare un layout nullo in SWING ?] (http://stackoverflow.com/questions/6592468/why-is-it-frowned-upon-to-use-a-null-layout-in-swing) per ulteriori dettagli – MadProgrammer

risposta

35

Supponendo che si sta utilizzando 1.3.4, quindi i requisiti del costruttore sono cambiati ...

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

enter image description here

Usando questo AbstractFormatter ...

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

} 
+0

Sì, sto usando Jdatepicker 1.3 .4, per testare questo ho usato un layout nullo. Questo è per il nostro progetto java finale per il livello di diploma. Grazie per l'aiuto. Puoi anche suggerire un modo per aggiungere un'immagine di sfondo per JFrame/JPanel? –

+1

Il modo migliore è creare un componente personalizzato che si estenda da JPanel, sovrascrivere il suo metodo paintComponent e disegnare l'immagine lì. Cerca SO, ci sono un sacco di esempi – MadProgrammer

+0

Come posso ottenere la data su una JLabel o Jtextfield? –

5

Basta utilizzare le proprietà nel costruttore di

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); 
+0

Sì, già fatto. A proposito, è davvero un buon pacchetto. L'ho usato per molte delle mie applicazioni. –

+0

Queste sono le proprietà di java.util? – BRHSM