JavaFX Frozen GUI При добавлении кнопки на панель управления - PullRequest
0 голосов
/ 24 октября 2018

Как добавить 5000 кнопок или меток на панель управления, не останавливая графический интерфейс пользователя в JAVA FX Точно так же, как это

Почему мне даже нужно так много кнопок ну, яне нужно столько, но по крайней мере 500 - 1000. Потому что я создаю приложение Fonticon Tool

Медленно, хорошо, но не замораживается Это нормально, еслиПриложение работает медленно и занимает несколько секунд, чтобы показать все кнопки. Но я не хочу, чтобы оно зависало на индикаторе выполнения и в графическом интерфейсе

Как это работает У меня есть база данных SQLite с парой таблиц, каждая таблица имеет список значений .Объект дает мне значения ArrayList

То, что я ищу Я ищу что-то вроде.

FlowPane fp = new FlowPane(); 

for(String fonticon_code : DatabaseTable.getlist()) //getlist() returns an array list of Strings
{
  fp.getChildren.add(new button().setGraphic(new FontIcon(fonticon_code)));

}

Я также хочу иметь возможность остановить и перезапустить Thread

Что я устал? 1031 * Я пытался Thread, Task, Platform.runLater (обновление);но я не уверен, что правильно их использую

1 Ответ

0 голосов
/ 24 октября 2018

Здесь MCVE с использованием ControlsFX GridView.

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import org.controlsfx.control.GridCell;
import org.controlsfx.control.GridView;

/**
 *
 * @author blj0011
 */
public class JavaFXApplication287 extends Application
{

    @Override
    public void start(Stage primaryStage)
    {
        ObservableList observableList = FXCollections.observableArrayList(Font.getFamilies());
        GridView<String> myGrid = new GridView(observableList);
        myGrid.setHorizontalCellSpacing(0);
        myGrid.setVerticalCellSpacing(0);
        myGrid.setCellFactory(gridView -> {
            return new GridCell<String>()
            {
                Button button = new Button("ABC");

                {
                    button.setPrefWidth(60);
                    button.setPrefHeight(60);
                }

                @Override
                public void updateItem(String item, boolean empty)
                {
                    if (empty || item == null) {
                        setText(null);
                        setGraphic(null);
                    }
                    else {
                        button.setFont(new Font(item, 14));
                        setGraphic(button);
                    }

                }
            };
        });

        StackPane root = new StackPane(myGrid);
        Scene scene = new Scene(root, 500, 700);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }

}

enter image description here

...