как разместить два TextField в одной строке TableView - PullRequest
0 голосов
/ 12 апреля 2019

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

1 Ответ

0 голосов
/ 14 апреля 2019

Когда я получаю правильное связанное изображение, вам нужно либо «разделить» ячейку строки таблицы по вертикали, либо реализовать что-то вроде «разметки строк» ​​для TabelView - обе эти вещи TableView не поддерживает вне-box - или вам нужно создать CellFactory, который создает пользовательский TableCell, который, например, отображает две метки в VBox.Не зная, как выглядят ваши данные, подход будет выглядеть примерно так:

theTableColumn.setCellFactory(column -> {
  return new TableCell<YourDataClass, YourDataFieldType>() {
    private VBox vbox;
    private Label upperLabel = new Label();
    private Label lowerLabel = new Label();

    {
        vbox = new VBox(upperLabel, lowerLabel);
        this.setGraphic(this.vbox);
        this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
    }

    @Override
    protected void updateItem(YourDataFieldType item, boolean empty) {
        super.updateItem(item, empty);

        if (item == null || empty) { 
             upperLabel.setText(null);
             lowerLabel.setText(null);
        } else {
             upperLabel.setText("Here goes the upper text (row)");
             lowerLabel.setText("Here goes the lower text (row)");
        }
    }
};

});

Это просто быстрый взгляд на то, как я обычно решаю специальные задачи рендеринга в TableView, пожалуйста, прочитайте его как эскиз или псевдокод.Идея заключается в следующем:

  • TableCell - это метка, поэтому вы можете использовать свойство Graphic, чтобы получить любой граф Node или Node, отображаемый внутри TabelCell
  • Важно: установить ячейку таблицыGRAPHIC_ONLY
  • Остальное - стандартная сантехника JavaFX TableCell (... не забывайте случай, когда ячейка должна быть пустой!)
  • Пока вам просто нужно отобразить две строки текста в одной ячейке, лучше использовать экземпляры Label.TextField будет использоваться только тогда, когда необходимо редактирование ячейки - в этом случае вам потребуется немного другой подход.
  • Что еще нужно сделать: горизонтальная линия, которую вы нарисовали на своем изображении, может быть сделана с помощью CSS.Возможно, вам лучше решить эту проблему с помощью фона ячейки таблицы и расстояния между метками, чем с нижней границей верхней метки.
  • Более общий подход для shure состоит в добавлении охвата строк в представление таблицы, иэто избавит вас от CSS для деталей рендеринга.Но это также означало бы «немного больше работы»; -)

Надеюсь, это поможет - пожалуйста, не стесняйтесь спрашивать, есть ли еще вопросы.

...