2015-11-12 2 views
1

Я бы предположил, что GridPane вычисляет ширину по умолчанию каждого столбца в соответствии с максимальной предпочтительной шириной всех элементов в этом столбце. Тем не менее, в моем коде, кажется, вычисляется слишком маленькая ширина, в результате одна из моих меток в столбце обрезается.JavaFX: GridPane вычисляет неправильную ширину столбца

Вот мой «cashflowform.fxml»:

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.shape.Box?> 
<GridPane xmlns:fx="http://javafx.com/fxml" fx:controller="finfx.ui.CashFlowForm" 
      style="-fx-padding:25;" 
      vgap="5" hgap="5"> 
    <Label text="Datum" 
      GridPane.columnIndex="0" GridPane.rowIndex="0"> 
    </Label> 
    <DatePicker fx:id="datePicker" GridPane.columnIndex="1" GridPane.rowIndex="0"/> 
    <Label text="Betrag" 
      GridPane.columnIndex="0" GridPane.rowIndex="1"> 
    </Label> 
    <TextField GridPane.columnIndex="1" GridPane.rowIndex="1"/> 
    <Label text="Kategorie" 
      GridPane.columnIndex="0" GridPane.rowIndex="2"> 
    </Label> 
    <TextField GridPane.columnIndex="1" GridPane.rowIndex="2"/> 
    <Label text="Anmerkung" 
      GridPane.columnIndex="0" GridPane.rowIndex="3"> 
    </Label> 
    <TextField GridPane.columnIndex="1" GridPane.rowIndex="3"/> 
    <Box GridPane.columnIndex="0" GridPane.rowIndex="4" 
     GridPane.columnSpan="2" 
     GridPane.hgrow="ALWAYS" 
     height="20"> 
    </Box> 
    <Button text="Speichern" 
      GridPane.columnIndex="0" GridPane.rowIndex="5" 
      GridPane.columnSpan="2" 
      GridPane.hgrow="ALWAYS" maxWidth="Infinity"> 
    </Button> 
    <Button text="Speichern &amp; Weitere Position..." 
      GridPane.columnIndex="0" GridPane.rowIndex="6" 
      GridPane.columnSpan="2" 
      GridPane.hgrow="ALWAYS" maxWidth="Infinity"> 
    </Button> 
    <Button text="Abbrechen" 
      GridPane.columnIndex="0" GridPane.rowIndex="7" 
      GridPane.columnSpan="2" 
      GridPane.hgrow="ALWAYS" maxWidth="Infinity"> 
    </Button> 
</GridPane> 

И это, как я настраивал сцену (обратите внимание, я не устанавливать любой размер, так что я позволил это вычислить сам размер):

primaryStage.setScene(new Scene(FXMLLoader.loadFxmlRoot("cashflowform"))); 
    primaryStage.show(); 

Результат:

enter image description here

Как вы можете видеть первое сотрудничество lumn слишком мала, чтобы полностью показать мой ярлык «Anmerkung». Почему это, и как лучше всего это исправить?

PS: В качестве побочного вопроса, если кто-то заботится, я также отметил, что мой «ящик», который я добавил как заполняющий пробел между моими ярлыками/полями и кнопками, фактически отображается как маленькая белая вертикальная линия, когда вы посмотрите внимательно. Кажется, что Box не подходит для этого. Я только начинаю с JavaFX, что будет подходящим партнером Swing's «Box.createVerticalGlue()»?

PPS: Прежде чем кто спрашивает его: «FXMLLoader» видели в моем коде является не javafx.fxml.FXMLLoader, а пользовательские утилиты класса

Спасибо!

ответ

1

Я нашел это. Установка

minWidth="-Infinity" 

для метки фиксирует это, потому что на самом деле -Infinity решает область/Control.USE_PREF_SIZE.

Я не знаю, почему это необходимо для этого, потому что использование предпочтительного размера должно быть поведением по умолчанию для размера столбцов в соответствии с документацией GridPane. Мне кажется, что-то вроде того, что мне нужно делать так. Но в любом случае это решает проблему.

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