【问题标题】:How to disable the maximizing option in JavaFX?如何禁用 JavaFX 中的最大化选项?
【发布时间】:2018-07-30 17:07:51
【问题描述】:

我正在创建一个 JavaFX 程序。我已经使用 .fxml 代码来设计页面,但是有一个问题,每当我运行程序时,它可以在默认高度和宽度下正常工作,但是当我最大化该结果时,按钮和其他内容保持在默认高度的原始位置和宽度。他们没有调整高度和宽度。因为它是一个 mp3 播放器,并且可以执行一些其他的小功能,所以我希望它的大小不应该是可扩展的(不能最大化)。这也将解决我的问题。

.fxml 代码

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>

<GridPane alignment="top_left" hgap="10" prefHeight="475.0" prefWidth="800.0" style="-fx-background-color: white;" vgap="10" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <columnConstraints>
      <ColumnConstraints />
   </columnConstraints>
   <rowConstraints>
      <RowConstraints />
      <RowConstraints />
   </rowConstraints>
   <children>
      <Label prefHeight="49.0" prefWidth="800.0" text="Spotify Downloader Music Player">
         <font>
            <Font name="Comic Sans MS" size="24.0" />
         </font>
         <GridPane.margin>
            <Insets left="10.0" />
         </GridPane.margin></Label>
      <GridPane GridPane.rowIndex="1">
        <columnConstraints>
          <ColumnConstraints hgrow="SOMETIMES" maxWidth="392.0" minWidth="10.0" prefWidth="253.0" />
          <ColumnConstraints hgrow="SOMETIMES" maxWidth="551.0" minWidth="10.0" prefWidth="391.0" />
            <ColumnConstraints hgrow="SOMETIMES" maxWidth="551.0" minWidth="10.0" prefWidth="217.0" />
        </columnConstraints>
        <rowConstraints>
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        </rowConstraints>
         <children>
            <Button mnemonicParsing="false" prefHeight="30.0" prefWidth="275.0" text="Home">
               <font>
                  <Font size="14.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" prefHeight="45.0" prefWidth="257.0" text="Playlist" GridPane.rowIndex="1">
               <font>
                  <Font size="14.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" prefHeight="47.0" prefWidth="257.0" text="Settings" GridPane.rowIndex="2">
               <font>
                  <Font size="14.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" prefHeight="51.0" prefWidth="257.0" text="About" GridPane.rowIndex="3">
               <font>
                  <Font size="14.0" />
               </font>
            </Button>
            <Label prefHeight="33.0" prefWidth="253.0" text="Music name" GridPane.columnIndex="1">
               <font>
                  <Font size="14.0" />
               </font>
               <GridPane.margin>
                  <Insets left="10.0" />
               </GridPane.margin>
            </Label>
            <TextField prefHeight="34.0" prefWidth="543.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
               <font>
                  <Font size="14.0" />
               </font>
               <GridPane.margin>
                  <Insets left="10.0" />
               </GridPane.margin>
            </TextField>
            <Button mnemonicParsing="false" text="Search" GridPane.columnIndex="2" GridPane.rowIndex="1">
               <GridPane.margin>
                  <Insets left="10.0" />
               </GridPane.margin>
            </Button>
         </children>
      </GridPane>
   </children>
</GridPane>

如何在 JavaFX 中禁用最大化选项?

如何通过大小扩展改变内容位置?

【问题讨论】:

  • 您的代码需要成为您问题的一部分。如果该项目消失或被修改,您的问题对未来的读者将毫无价值。也就是说,我猜你使用 AnchorPanes 和绝对坐标来放置你的子节点;尝试用其他布局选择替换所有使用的 Panes 和 AnchorPanes。
  • 你问错问题了。以像素为单位强制窗口及其组件的大小将使它们变得丑陋和/或无法用于其他计算机上的用户,这些用户具有不同的屏幕和不同的字体。这就是布局存在的原因:正确而优雅地处理所有这些。正确使用布局后,您就不必担心用户调整窗口大小或最大化窗口。
  • 至少在 Windows 上,调用 stage.setResizable(false) 会禁用最大化按钮。
  • @Slaw 在 Linux 和 mac,还有其他代码吗?
  • 我没有要测试的 Linux 或 Mac。你在这两个平台上试过setResizable吗?

标签: java javafx fxml


【解决方案1】:

如果您将Stageresizable property 设置为false,它将禁用最大化按钮,而只保留最小化按钮。

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        // Create Scene and add it to primaryStage
        primaryStage.setResizable(false);
        primaryStage.show();
    }
}

这只会阻止用户调整 Stage 的大小,但不会阻止您(开发人员)以编程方式调整 Stage 的大小。

定义用户是否可以调整舞台大小。 您仍然可以通过编程方式更改舞台的大小。这是一个 允许实现选择性地制作舞台的提示 由用户调整大小。

Javadoc 表明这只是实现的一个提示。但是,我只能在 Windows 10 机器上进行测试,但您在问题 cmets 中提到它可以在 Linux 机器上运行。

【讨论】:

    【解决方案2】:

    您可以使用实用程序窗口从工具栏中删除最大化和最小化选项。

    stage.initStyle(StageStyle.UTILITY);
    

    或者您可以在舞台上设置最大高度和宽度。例如:

    stage.setMaxHeight(400.0);
    stage.setMaxWidth(600.0);
    

    但是,如果用户可以选择最大化,他们可能会感到困惑,但窗口只能达到特定高度。

    【讨论】:

    • stage.initStyle(StageStyle.UTILITY); 也禁用了不需要的最小化选项。有没有其他方法可以禁用仅最大化选项?
    • 在技术上是正确的(以这样一个窗口的一些视觉问题为模,几天前有一个问题我现在没有找到)但对于解决 OP 的实际问题无济于事,这是一个布局不正确;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2016-04-20
    • 2010-10-28
    • 1970-01-01
    • 2017-11-10
    • 2015-12-15
    • 2014-08-07
    相关资源
    最近更新 更多