0

タイトルが示すように、javafx.scene.control.Label のテキストを変更すると、同じレイアウトに含まれるすべてのコンポーネントのサイズが変更されます。これを防ぐにはどうすればよいですか?これが私のFXMLマークアップです:

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

<?import org.think.software.test.javafx.view.login.LoginView?>

<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.PasswordField?>

<?import javafx.geometry.Insets?>

<LoginView fx:controller="org.think.software.test.javafx.view.login.LoginView"
    xmlns:fx="http://think.org/software/test/javafx/login" alignment="CENTER"
    hgap="10" vgap="10">
    <padding>
        <Insets top="35" right="35" bottom="35" left="35" />
    </padding>
    <Label fx:id="infoLabel" GridPane.columnIndex="0"
        GridPane.rowIndex="0" GridPane.columnSpan="3" text="%infoLabelText" />
    <Label fx:id="usernameLabel" GridPane.columnIndex="0"
        GridPane.rowIndex="1" text="%usernameLabelText" />
    <TextField fx:id="usernameField" GridPane.columnIndex="1"
        GridPane.rowIndex="1" GridPane.columnSpan="2" promptText="%usernameFieldPromptText" />
    <Label GridPane.columnIndex="0" GridPane.rowIndex="2"
        text="%passwordLabelText" />
    <PasswordField fx:id="passwordField"
        GridPane.columnIndex="1" GridPane.rowIndex="2" GridPane.columnSpan="2"
        promptText="%passwordFieldPromptText" />
    <Button fx:id="loginButton" GridPane.columnIndex="0"
        GridPane.rowIndex="3" GridPane.columnSpan="3"
        onAction="java.lang.System.out.println(infoLabel.setText('Logging in...'));"
        text="%loginButtonText" />
</LoginView>

テキスト変更前

テキスト変更後

4

1 に答える 1

0

いくつかの列の制約を使用して、さまざまな列の展開を制御します。

どの行にも 2 つ以上のコンポーネントがないため、テキスト フィールドが 2 つの列にまたがっている理由がわかりません。私は次のようなことを試します:

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

<?import org.think.software.test.javafx.view.login.LoginView?>

<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.ColumnConstraints?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.PasswordField?>

<?import javafx.geometry.Insets?>

<LoginView fx:controller="org.think.software.test.javafx.view.login.LoginView"
    xmlns:fx="http://think.org/software/test/javafx/login" alignment="CENTER"
    hgap="10" vgap="10">
    <padding>
        <Insets top="35" right="35" bottom="35" left="35" />
    </padding>
    <Label fx:id="infoLabel" GridPane.columnIndex="0"
        GridPane.rowIndex="0" GridPane.columnSpan="2" text="%infoLabelText" />
    <Label fx:id="usernameLabel" GridPane.columnIndex="0"
        GridPane.rowIndex="1" text="%usernameLabelText" />
    <TextField fx:id="usernameField" GridPane.columnIndex="1"
        GridPane.rowIndex="1" promptText="%usernameFieldPromptText" />
    <Label GridPane.columnIndex="0" GridPane.rowIndex="2"
        text="%passwordLabelText" />
    <PasswordField fx:id="passwordField"
        GridPane.columnIndex="1" GridPane.rowIndex="2" 
        promptText="%passwordFieldPromptText" />
    <Button fx:id="loginButton" GridPane.columnIndex="0"
        GridPane.rowIndex="3" GridPane.columnSpan="2"
        onAction="java.lang.System.out.println(infoLabel.setText('Logging in...'));"
        text="%loginButtonText" />

    <columnConstraints>
        <!-- left column -->
        <ColumnConstraints hgrow="NEVER" halignment="RIGHT" />
        <!-- right column -->
        <ColumnConstraints hgrow="SOMETIMES" halignment="LEFT" minWidth="150" maxWidth="600" />
    </columnConstraints>
</LoginView>

minWidthとの値maxWidthは単なる例です。それらを試すことができます(または、完全に省略することもできます)。hgrow="ALWAYS"必要な正確な動作に応じて、正しい列を試すこともできます。

于 2014-12-31T02:50:18.723 に答える