如何在不冻结JAVA FX Just like this中的GUI的情况下向流面板添加5000个按钮或标签
为什么我什至需要这么多按钮 好吧,我不需要那么多,但至少不需要500-1000。因为我正在构建一个应用程序Fonticon Tool
慢是可以的,但不能冻结 如果应用程序运行缓慢并且需要花费几秒钟才能显示所有按钮,那是可以的,但是我不希望它冻结进度条和GUI
工作方式 我有一个带有两个表的SQLite database, 每个表都有一个values的列表。一个对象给了我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,Task,Platform.runLater(update); 但我不确定我是否正确使用它们
答案 0 :(得分:1)
这里有一个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);
}
}