在最大化模式下更改字体大小

卢卡·阿尔贝托(Luca Alberto)

我正在使用JavaFX,当我按下位于“退出”按钮附近右上角的最大化按钮时,我想增加项目中所有元素的字体大小,这可能吗?我的起始项目是800x600,字体大小为18px,我想,当用户按下最大化按钮时,字体大小变为24px。我正在使用Java 7,NetBeans和Scene Builder。看到图像,我希望全屏显示时文本按钮的大小比小按钮大!因此,我想覆盖最大化按钮操作!谢谢!

一 二

编辑:当用户按下此按钮时,我想增加字体大小我该三怎么做?

宝石海

澄清最大与全屏

您在问题中指向的按钮是最大化按钮。全屏模式不同于最大化窗口(在大多数窗口系统中)。

为什么您不想列出最大化属性

您可以使用侦听器来监听窗口maximum属性,并根据maximum属性值设置所需的字体大小,类似于此处概述:用于最小化,最大化Stage的侦听器等但是,我对此的测试并不是一个非常可靠的解决方案,因为(使用MacFX的当前JavaFX 8u60实现,在Mac上实现了最大化),当用户按下“最大化”按钮(且最大化属性设置为true)时,将触发监听器),但是如果用户稍后通过窗口边框手动调整窗口大小,则maximated属性保持为true,并且不会触发任何侦听器以指出该窗口不再最大化(这实际上可能是JavaFX 8u60的Mac实现中的错误)。因此,您可以捕获最大化事件,并在最大化时调整UI的大小,但是当不再最大化时,则没有事件可将UI重置为正常(未最大化)视图。

改用root布局边界

一个更健壮的实现似乎实现了一种响应式布局算法,侦听场景的布局边界的当前大小,并根据布局边界的变化执行不同的布局(或字体大小)。尽管实现与基于HTML的网站不同,但这些概念类似于响应式Web设计,因为JavaFX中的CSS和布局与HTML的工作方式不同。

这是此方法的示例:

较小的窗口(小字体)

当窗口大小不是很大时,使用较小的字体。

较小的字体(小字体)

较大的窗口(包括最大化或全屏)窗口(较大的字体)

当窗口较大时,将使用较大的字体。

较大的尺寸

MaximizeFontResponder.java

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.geometry.Bounds;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class MaximizeFontResponder extends Application {

    private static final String MAXIMIZED_ROOT_STYLE_CLASS = "maximized-root";
    private static final double FONT_SIZE_WIDTH_ON_THRESHOLD = 800;
    private static final double FONT_SIZE_HEIGHT_ON_THRESHOLD = 400;
    private static final double FONT_SIZE_WIDTH_OFF_THRESHOLD = 780;
    private static final double FONT_SIZE_HEIGHT_OFF_THRESHOLD = 380;

    @Override
    public void start(Stage stage) throws Exception {
        StackPane layout = new StackPane(new Label("Now is the time for all good men\nto come to the aid of the party."));

        Scene scene = new Scene(layout);
        scene.getStylesheets().add(
                MaximizeFontResponder.class.getResource(
                        "font-responder.css"
                ).toURI().toURL().toExternalForm()
        );
        stage.setScene(scene);

        refreshRootFontSize(layout);
        scene.getRoot().layoutBoundsProperty().addListener((observable, oldBounds, newBounds) -> {
            refreshRootFontSize(layout);
        });

        stage.show();
    }

    private void refreshRootFontSize(Pane root) {
        final ObservableList<String> rootStyleClass = root.getStyleClass();
        final Bounds layoutBounds = root.getLayoutBounds();

        if (layoutBounds.getWidth() >= FONT_SIZE_WIDTH_ON_THRESHOLD
                && layoutBounds.getHeight() >= FONT_SIZE_HEIGHT_ON_THRESHOLD
                && !rootStyleClass.contains(MAXIMIZED_ROOT_STYLE_CLASS)) {
            rootStyleClass.add(MAXIMIZED_ROOT_STYLE_CLASS);
        }

        if (layoutBounds.getWidth() <= FONT_SIZE_WIDTH_OFF_THRESHOLD
                || layoutBounds.getHeight() <= FONT_SIZE_HEIGHT_OFF_THRESHOLD) {
            rootStyleClass.remove(MAXIMIZED_ROOT_STYLE_CLASS);
        }
    }

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

font-responder.css

.root {-fx-font-size:20px; } .maximized-root {-fx-font-size:40px; }

在以下有关问题的答案中,解释了此样本中基于CSS定义的-fx-font-size调整字体和UI组件大小的技术:

关于电磁单元和控制/布局尺寸的注意事项

尽管该示例不包含任何控件,但如果包含,则它们的大小也将增大,以容纳较大的字体,因为所有JavaFX控件均基于em单位进行大小调整。如果您希望其余的UI布局也以相同的方式进行调整,则还应根据em单位(而不是绝对像素)调整其大小注意,我已经为em单元链接链接了一个基于HTML的资源(JavaFX CSS与HTML CSS有所不同),但是一般的em概念非常相似,因此您应该能够从该链接中的信息中掌握它。

更多资源

对于更强大的解决方案,您可能需要研究:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ubuntu 上的 Chrome 在最大化模式下冻结

来自分类Dev

最大化img的大小

来自分类Dev

在不移动/调整窗口大小的情况下将窗口状态从最大化更改为恢复?

来自分类Dev

防止退出最大化窗口模式

来自分类Dev

更改文字的字体大小

来自分类Dev

更改valueBoxes的字体大小

来自分类Dev

更改按钮的字体大小

来自分类Dev

字体大小更改问题

来自分类Dev

动态更改字体大小

来自分类Dev

如何更改字体大小?

来自分类Dev

jQuery在调整大小时更改img的宽度,但在最大化时不更改

来自分类Dev

最大化窗口大小,而不是在iTerm上执行全屏模式?

来自分类Dev

最大化div并更改其fontSize

来自分类Dev

在全屏模式下使用活动的应用程序(未最大化)

来自分类Dev

MFC App 不能只在管理员模式下最大化

来自分类Dev

在不知道字体系列的情况下更改Canvas的字体大小

来自分类Dev

iText最大字体大小

来自分类Dev

计算最大字体大小

来自分类Dev

当聚焦窗口最大化并且离开最大化模式时接收信号

来自分类Dev

组织模式TODO字体大小

来自分类Dev

当窗口最大化时获得非最大化的窗口位置/大小

来自分类Dev

当窗口最大化时获得非最大化的窗口位置/大小

来自分类Dev

为最大化的窗口设置最大大小

来自分类Dev

更改TextBlock的字体系列时缺少关闭,最大化和最小化图标的功能

来自分类Dev

在python子图中更改字体大小

来自分类Dev

CKEditor上的字体大小更改事件

来自分类Dev

在回归树图中更改字体大小

来自分类Dev

Seaborn,更改颜色条的字体大小

来自分类Dev

使用Jquery更改标签的字体大小