javafx показывает только кнопку выбора даты, а не редактор - PullRequest
0 голосов
/ 13 июня 2018

У меня есть javafx datePicker, и я хочу, чтобы его вообще показывали без текстового редактора.Я хочу, чтобы только кнопка выбора была видимой и активной.Есть какой-либо способ сделать это.Конечно, я пробовал datePicker.getEditor (). SetVisible (false), но есть еще раздражающий заполнитель, который я хочу сделать невидимым.

DatePickerView.fxml

<HBox>
   <children>
       <TextField/>
       <DatePicker fx:id="datePicker">
           <opaqueInsets>
              <Insets/>
           </opaqueInsets>
        </DatePicker>  
   </children>
</Hbox>

DatePickerController.Ява

public class DatePickerComtroller implements Initializable{
    @FXML
    DatePicker datePicker;
    @FXML
    HBox container;

    public DatePickerComtroller(){
    }

    public initialize(URL location, ResourceBundle resources){
       datePicker.getEditor().setVisible(false);
    }

1 Ответ

0 голосов
/ 13 июня 2018

Поскольку вы не описали то, что хотите показать вместо textField, я предполагаю, что вы хотите, чтобы кнопка заполняла общую ширину.Независимо от того, кто отвечает за создание, настройку и размещение дочерних элементов элемента управления, это его оболочка.В общем, вам понадобится собственный скин и настроить то, что вы хотите изменить, здесь: макет.

Что делать:

  • подкласс DatePickerSkin
  • в его конструкторе, возьмите arrowButton (это личное, но вы можете найти его через его стиль)
  • переопределить layoutChildren, удалите редактор и измените ширину кнопки, чтобы заполнить ширину

Некоторый пример необработанного кода (очевидно, есть свобода для полировки :)

public class MyPickerSkin extends DatePickerSkin {

    StackPane arrowButtonAlias;
    public MyPickerSkin(DatePicker control) {
        super(control);
        arrowButtonAlias = (StackPane) control.lookup(".arrow-button");
    }

    @Override
    protected void layoutChildren(double x, double y, double w, double h) {
        super.layoutChildren(x, y, w, h);
        // seems the removal must happen after super's layout (see OPs comment)
        getChildren().remove(getEditor());
        arrowButtonAlias.resizeRelocate(x, y, w, h);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...