首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX -创建响应式布局

JavaFX -创建响应式布局
EN

Stack Overflow用户
提问于 2015-08-15 03:40:28
回答 3查看 7.9K关注 0票数 2

我正在创建一个具有以下布局的GUI应用程序:

在一个桌面大小,我将有一个HBox与图像旁边的一些文字。在移动视图中,图像将位于文本的上方(或下方)。

为这个布局创建响应性设计的最佳方法是什么?我发现在运行时切换FXML会在扩展和缩小窗口时造成一些滞后,但我希望尽可能多地保留FXML中的布局,因为它是一个更好的设计。是否最好同时加载HBox和VBox FXML文件,并在运行时检查大小,并根据大小将HBox更改为VBox并以编程方式添加内容?

更新

更具体地说,我希望有反应和干净的东西。下面是一个很好的例子:4

EN

回答 3

Stack Overflow用户

发布于 2015-09-10 12:59:18

对于您描述的情况,只需使用FlowPane即可。下面是@HendrikEbbers示例的一个版本,使用FlowPane

代码语言:javascript
复制
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ResponsiveLayoutDemo extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Label textLabel = new Label("Lorem ipsum dolor sit amet, "
                + "consectetur adipiscing elit, sed do eiusmod "
                + "tempor incididunt ut labore et dolore magna aliqua. "
                + "Ut enim ad minim veniam, quis nostrud exercitation "
                + "ullamco laboris nisi ut aliquip ex ea commodo consequat. "
                + "Duis aute irure dolor in reprehenderit in voluptate velit "
                + "esse cillum dolore eu fugiat nulla pariatur. "
                + "Excepteur sint occaecat cupidatat non proident, "
                + "sunt in culpa qui officia deserunt mollit anim id est laborum. "
                + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, "
                + "sed do eiusmod tempor incididunt ut labore et dolore "
                + "magna aliqua. Ut enim ad minim veniam, quis nostrud "
                + "exercitation ullamco laboris nisi ut aliquip ex ea "
                + "commodo consequat. Duis aute irure dolor in "
                + "reprehenderit in voluptate velit esse cillum dolore eu "
                + "fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
                + "non proident, sunt in culpa qui officia deserunt mollit "
                + "anim id est laborum.");

        textLabel.setWrapText(true);
        textLabel.setPrefWidth(360);

        ImageView imageView = new ImageView(new Image("http://goo.gl/1tEZxQ", 240, Double.MAX_VALUE, true, true));

        FlowPane flowPane = new FlowPane(Orientation.HORIZONTAL, 8, 8, imageView, textLabel);
        flowPane.setRowValignment(VPos.TOP);
        primaryStage.setScene(new Scene(flowPane));
        primaryStage.show();
    }


    public static void main(String... args) {
        launch(args);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2015-08-15 15:30:31

我认为在启动时加载备用FXML文件并在必要时在它们之间切换没有问题。您甚至应该能够在后台线程上这样做,只要您不将图形附加到现场。像图像这样的资源可以在两个场景图之间共享,因此您可以避免重新加载图像的时间。

票数 0
EN

Stack Overflow用户

发布于 2015-09-10 09:28:33

我创建了一个使用HBox和VBox的示例,并根据窗口大小切换它们:http://www.guigarage.com/2015/09/how-to-create-a-responsive-layout-in-javafx/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32021293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档