为什么我的JavaFX窗口到处都不一样?

Vol*_*ort 1 java javafx

我正在玩JavaFX.在Scene Builder中,当Eclipse运行时,它看起来像这样:

在此输入图像描述

什么时候,我把它作为Runnable Jar出口.把它放在我的桌面上,这就是我得到的:

在此输入图像描述

为什么?

我在Mac OSX上,使用Java 7.

这是代码:

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

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.collections.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
  <children>
    <TabPane prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE">
      <tabs>
        <Tab text="Untitled Tab 1">
          <content>
            <AnchorPane id="Content" minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
              <children>
                <Button layoutX="103.0" layoutY="65.0" mnemonicParsing="false" text="Button" />
                <Button layoutX="103.0" layoutY="110.0" mnemonicParsing="false" prefHeight="37.0" prefWidth="121.0" text="Button" />
                <CheckBox layoutX="103.0" layoutY="166.0" mnemonicParsing="false" text="CheckBox" />
                <ChoiceBox layoutX="103.0" layoutY="201.0">
                  <items>
                    <FXCollections fx:factory="observableArrayList">
                      <String fx:value="Item 1" />
                      <String fx:value="Item 2" />
                      <String fx:value="Item 3" />
                    </FXCollections>
                  </items>
                </ChoiceBox>
                <MenuBar prefWidth="600.0">
                  <menus>
                    <Menu mnemonicParsing="false" text="File">
                      <items>
                        <MenuItem mnemonicParsing="false" text="Close" />
                      </items>
                    </Menu>
                    <Menu mnemonicParsing="false" text="Edit">
                      <items>
                        <MenuItem mnemonicParsing="false" text="Delete" />
                      </items>
                    </Menu>
                    <Menu mnemonicParsing="false" text="Help">
                      <items>
                        <MenuItem mnemonicParsing="false" text="About" />
                      </items>
                    </Menu>
                  </menus>
                </MenuBar>
                <ProgressBar layoutX="100.0" layoutY="249.0" prefWidth="200.0" progress="0.45" />
                <ProgressIndicator layoutX="397.0" layoutY="99.0" prefHeight="113.0" prefWidth="131.0" progress="-0.43" />
                <RadioButton layoutX="348.0" layoutY="247.0" mnemonicParsing="false" text="RadioButton" />
              </children>
            </AnchorPane>
          </content>
        </Tab>
        <Tab text="Untitled Tab 2">
          <content>
            <AnchorPane id="Content" minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
          </content>
        </Tab>
      </tabs>
    </TabPane>
  </children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)

Jam*_*s_D 7

它在不同的上下文中使用不同的JVM版本.看起来你已经将SceneBuilder和Eclipse配置为将Java 7与JavaFX 2.2配合使用,但是您已将Java 8安装为Mac上的默认JVM; 因此,当您运行jar文件时,它在Java 8下运行.

要检查这一点,请打开终端并键入java -version.我希望你会得到一个Java 8版本.

JavaFX 2.2和Java 8使用不同的默认样式表.JavaFX 2.2使用caspian.css,而Java 8使用modena.css.尝试使用以下选项从终端运行可执行jar文件:

java -Djavafx.userAgentStylesheetUrl=caspian -jar path/to/jar/file
Run Code Online (Sandbox Code Playgroud)

它看起来(几乎完全)就像在JavaFX 2.2中一样