2016-08-16 2 views
0

Я хочу создать новый класс скина для DatePicker. После различных инструкций о том, как это сделать, например, guigarage правильный путь, чтобы расширить SkinBase и загрузить новый класс кожи, установив -fx-skin свойство имени класса кожи, так что я сделал, но я получил эту ошибку:Как создать новый скин для `DatePicker`, javafx

Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: sample.myDatePickerSkin cannot be cast to com.sun.javafx.scene.control.skin.DatePickerSkin 
    at com.sun.javafx.scene.control.behavior.DatePickerBehavior.onAutoHide(DatePickerBehavior.java:103) 

и если вы посмотрите на DatePickerBehavior.java:103:

@Override public void onAutoHide() { 
     // when we click on some non-interactive part of the 
     // calendar - we do not want to hide. 
     DatePicker datePicker = (DatePicker)getControl(); 
     DatePickerSkin cpSkin = (DatePickerSkin)datePicker.getSkin(); 
     cpSkin.syncWithAutoUpdate(); 
     // if the DatePicker is no longer showing, then invoke the super method 
     // to keep its show/hide state in sync. 
     if (!datePicker.isShowing()) super.onAutoHide(); 
    } 

Так что я сделал что-то неправильно? или я также должен написать myDatePickerBehavior?

+0

Обратите внимание: com.sun.javafx.scene.control.skin.BaseSkin не является общедоступным API. – Puce

ответ

0

я должен продлить DatePickerSkin:

package sample; 

import com.sun.javafx.scene.control.skin.DatePickerSkin; 
import javafx.scene.control.DatePicker; 

public class customDatePickerSkin extends DatePickerSkin { 
    public customDatePickerSkin(DatePicker datePicker) { 
     super(datePicker); 
    } 
} 
+0

Обратите внимание: com.sun.javafx.scene.control.skin.DatePickerSkin не является опубликованным API. AFAIK, скины по умолчанию станут опубликованными API с Java SE 9 и Jigsaw: http://hg.openjdk.java.net/openjfx/9/rt/file/0f32ff067545/modules/javafx.controls/src/main/java/ JavaFX/сцена/контроль/кожа – Puce

1

Официальный способ реализовать Кожица либо

или

  • осуществить Skin напрямую.

com.sun.javafx.scene .control.skin.BaseSki n не является опубликованным API.

Обратите внимание, что с Java SE 9 и Jigsaw DatePickerSkin, а также другим значением по умолчанию skins станут опубликованы API, AFAIK. Тогда это должно быть безопасно продлить их, если оно соответствует вашим требованиям.

Смежные вопросы