Заполните простой TableColumn в javaFX - PullRequest
0 голосов
/ 13 октября 2019

Я экспериментирую с отображением ArrayList строк в табличной колонке javaFX. Я прочитал много примеров, которые подробно описывают отображение и динамическое изменение пользовательских классов и т. Д., Но я просто хочу увидеть фундаментальную реализацию столбца, отображающего данные массива. Я пробовал различные методы, в том числе использование ObservableList, но мой интерес является более базовым.

Предложения очень ценятся.

Вот мой код: Основной:

package testCram;

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene; 
import javafx.scene.control.TableView;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Main extends Application {


@Override
public void start(Stage primaryStage) throws Exception{
    Parent root = FXMLLoader.load(getClass().getResource("mainWindow.fxml"));
    primaryStage.setTitle("Hello World");
    primaryStage.setScene(new Scene(root, 300, 275));
    primaryStage.show();
}


public static void main(String[] args) {
    launch(args);
}

Контроллер:

package testCram;

import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import java.util.*;

public class Controller {
//instances of all controls

@FXML
public TableView<String> table;
@FXML
public TableColumn<String , String> column1;

public void setData(){

    Collection<String> list = new ArrayList<>();
    list.add("String1");
    list.add("String2");
    list.add("String3");
    list.add("String4");
    list.add("String5");
    list.add("String6");

    //I understand that you need to use 'setCellValueFactory' but I don't see what is needed to extract the values from list.
    column1.setCellValueFactory(cellData ->
            new ReadOnlyStringWrapper(cellData.getValue()));
    }
}

FXML:

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

<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.RowConstraints?>

<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-                           Infinity" minWidth="-Infinity" prefHeight="718.0" prefWidth="569.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="testCram.Controller">
 <columnConstraints>
     <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0"     prefWidth="100.0" />

 </columnConstraints>
 <rowConstraints>
 <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />

</rowConstraints>
<children>
<Pane prefHeight="718.0" prefWidth="596.0">
<children>
<TableView fx:id="table" layoutX="75.0" layoutY="99.0" prefHeight="200.0" prefWidth="399.0">
<columns>
<TableColumn fx:id="column1" prefWidth="100.0" text="String" />
</columns>
</TableView>
</children></Pane>
</children>
</GridPane>

1 Ответ

0 голосов
/ 13 октября 2019

Я работал над этим дальше, и я опубликую свой собственный ответ:

Чтобы столбец не отображал данные, вы должны указать таблице заполнить данные: Добавьте строку: table.getItems () .addAll (список);

в

column1.setCellValueFactory (cellData -> new ReadOnlyStringWrapper (cellData.getValue ()));

Надеюсь, это поможет кому-то ещекто застрянет.

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