为什么此代码不生成选项卡窗格?
why this code doesn't produce a tab pane?
<TabPane fx:controller="application.FXMLcontrolor" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="ALL_TABS" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.65">
<tabs>
<Tab text="Untitled Tab 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
<Tab text="Untitled Tab 2">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</TabPane>
控制器是这样的
public class FXMLcontrolor extends TabPane
{
public FXMLcontrolor()
{
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource( "FXMLdocument.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try
{
fxmlLoader.load();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
主要是这样的:
public class Main extends Application
{
@Override
public void start(Stage stage) throws IOException
{
FXMLcontrolor mainControllor=new FXMLcontrolor();
stage.setScene(new Scene(mainControllor));
stage.setTitle("Custom Control");
stage.setWidth(400);
stage.setHeight(400);
stage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
结果里面没有标签,为什么不显示任何标签?我已经使用 FXML 创建了一个 UI 和一个控制器,我必须做什么?事实上,我正在寻找一种方法来管理带有多个选项卡和每个选项卡中的多个控件的选项卡窗格,但即使在实现这个简单示例时我也遇到了问题。
如果您使用
动态设置根目录
fxmlLoader.setRoot(...);
您需要使用 <fx:root>
元素作为 FXML 的根元素。见 documentation.
此外,如果您在代码中设置控制器
fxmlLoader.setController(...);
您应该不在 FXML 文件中指定 fx:controller
属性。所以你的 FXML 文件应该是
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.layout.AnchorPane?>
<fx:root type="TabPane" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="ALL_TABS" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.65">
<tabs>
<Tab text="Untitled Tab 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
<Tab text="Untitled Tab 2">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</fx:root>
<TabPane fx:controller="application.FXMLcontrolor" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="ALL_TABS" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.65">
<tabs>
<Tab text="Untitled Tab 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
<Tab text="Untitled Tab 2">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</TabPane>
控制器是这样的
public class FXMLcontrolor extends TabPane
{
public FXMLcontrolor()
{
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource( "FXMLdocument.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try
{
fxmlLoader.load();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
主要是这样的:
public class Main extends Application
{
@Override
public void start(Stage stage) throws IOException
{
FXMLcontrolor mainControllor=new FXMLcontrolor();
stage.setScene(new Scene(mainControllor));
stage.setTitle("Custom Control");
stage.setWidth(400);
stage.setHeight(400);
stage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
结果里面没有标签,为什么不显示任何标签?我已经使用 FXML 创建了一个 UI 和一个控制器,我必须做什么?事实上,我正在寻找一种方法来管理带有多个选项卡和每个选项卡中的多个控件的选项卡窗格,但即使在实现这个简单示例时我也遇到了问题。
如果您使用
动态设置根目录fxmlLoader.setRoot(...);
您需要使用 <fx:root>
元素作为 FXML 的根元素。见 documentation.
此外,如果您在代码中设置控制器
fxmlLoader.setController(...);
您应该不在 FXML 文件中指定 fx:controller
属性。所以你的 FXML 文件应该是
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.layout.AnchorPane?>
<fx:root type="TabPane" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="ALL_TABS" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.65">
<tabs>
<Tab text="Untitled Tab 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
<Tab text="Untitled Tab 2">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</fx:root>