2014-11-07 5 views
12

En son sürüm 1.3.4 JDatePicker ile çalışıyorum. Nasıl uygulanmalı?JDatePicker'ı nasıl uygularım?

Derleyici hatası alıyorum: Kurucu JDatePanelImpl (UtilDateModel) tanımsız. Önerilen düzeltme: JDatePanelImpl (DateModel, Properties) ile eşleşecek argümanı eklemektir. Özellikler argümanı olarak ne geçmelidir?

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

yapıcı özelliklerini kullanırlar. 'Null' düzeni kullanmaktan kaçının, pixel mükemmel düzenler, modern kullanıcı arabirimi tasarımı içinde bir yanılsamadır. Bileşenlerin bireysel büyüklüğünü etkileyen çok fazla faktör vardır, bunların hiçbiri kontrol edemezsiniz. Swing, çekirdekte düzen yöneticileri ile çalışmak üzere tasarlandı, bunları atmak, daha fazla zaman harcayacağınız sorunların ve sorunların hiçbirine yol açmayacak ve – MadProgrammer

+1

'u düzeltmeye çalışacak. Ve [SWING'de null mizanpajı kullanmak için neden kaşlarını çattıracak? ?] (http://stackoverflow.com/questions/6592468/why-is-it-frowned-upon-to-use-a-null-layout-in-swing) daha fazla ayrıntı için – MadProgrammer

cevap

35

sonra yapıcı gereksinimleri değişmiştir 1.3.4 kullanıyor varsayarsak ...

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

Bu AbstractFormatter kullanarak ...

`<- Bu kötü olabilir, bunu yapmayın;>` conn.setLayout (null) -
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

Evet Jdatepicker 1.3 kullanıyorum .4, bunu test etmek için boş bir düzen kullanıyorum. Bu diploma seviyesi için son java projemiz içindir. Yardım için teşekkürler. Ayrıca JFrame/JPanel için arka plan resmi eklemenin bir yolunu önerebilir misin? –

+1

En iyi yol, JPanel'den uzanan özel bir bileşen oluşturmak, paintComponent yöntemini geçersiz kılmak ve görüntüyü buraya çizmektir. SO ara, çok sayıda örnek var – MadProgrammer

+0

Tarihi JLabel veya Jtextfield'a nasıl alabilirim? –

5

Sadece bu Bkz

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

Evet, bunu zaten yaptım. Bu arada aslında oldukça iyi bir paket. Uygulamalarımın çoğunu kullandım. –

+0

Bunlar java.util özelliklerinden mi? – BRHSM