我的第一个javafx程序/项目有问题。我需要使主fxml场景,我可以插入一些按钮和一些其他fxml的网页到主场景。我想能够通过两个左/右按钮移动到左边或右边的页面,并且可以编辑加载的fxml页面上的“标签”字段。
我试图在主场景的边框区域显示这些页面。我使用javafx controller加载了另一个页面,它可以工作,但是当我尝试在加载的fxml page1上设置“label”字段(名为“counter”)时,我有一个错误,控制器中的这个label字段为null(我为所有页面设置了一个控制器)
我的控制器:
public class Controller implements Initializable {
@FXML
private Button Start;
@FXML
private BorderPane computer;
@FXML
private Label counter;
int status = 0, next=0;
@FXML
void onPressed(ActionEvent event) {
counter.setText(String.valueOf(next));
next += 1;
}
@FXML
void startComputer() throws IOException {
loadPage("page1");
setStatus(1);
}
@FXML
void right_navigation(ActionEvent event) throws IOException {
if(getStatus() == 1) {
loadPage("page2");
setStatus(2);
} else if(getStatus() == 2){
loadPage("page3");
setStatus(3);
} else if(getStatus() == 3){
loadPage("page4");
setStatus(4);
} else if(getStatus() == 4){
loadPage("page1");
setStatus(1);
}
}
@FXML
void left_navigation(ActionEvent event) throws IOException {
if(getStatus() == 4){
loadPage("page3");
setStatus(3);
} else if(getStatus() == 3) {
loadPage("page2");
setStatus(2);
} else if(getStatus() == 2){
loadPage("page1");
setStatus(1);
} else if(getStatus() == 1){
loadPage("page4");
setStatus(4);
}
}
private void loadPage(String page) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource(page + ".fxml"));
computer.setCenter(root);
}
private void setStatus(int status){
this.status = status;
}
private int getStatus(){
return status;
}
}
fxml主场景:
<?import javafx.scene.image.Image?>
<GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<AnchorPane prefHeight="600.0" prefWidth="800.0">
<children>
<Button fx:id="start" layoutX="520.0" layoutY="540.0" mnemonicParsing="false" onAction="#startComputer" text="Start" />
<Button fx:id="count" layoutX="620.0" layoutY="540.0" mnemonicParsing="false" onAction="#onPressed" text="Count" />
<Button fx:id="left" layoutX="150.0" layoutY="540.0" mnemonicParsing="false" onAction="#left_navigation" text="<" />
<Button fx:id="right" layoutX="180.0" layoutY="540.0" mnemonicParsing="false" onAction="#right_navigation" text=">" />
<BorderPane fx:id="computer" layoutX="300.0" layoutY="200.0" prefHeight="200.0" prefWidth="180.0" styleClass="comp_display" stylesheets="@../myCss.css" />
</children>
</AnchorPane>
</children>
</GridPane>
borderpane中的一个fxml页:
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="200.0" prefWidth="200.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<top>
</top>
<center>
<AnchorPane prefHeight="186.0" prefWidth="144.0" styleClass="page_screen" stylesheets="@../myCss.css" BorderPane.alignment="CENTER">
<children>
<Label fx:id="counter" layoutX="51.0" layoutY="59.0" text="0" />
</children>
</AnchorPane>
</center>
</BorderPane>
我想从控制器设置fxml第1页的“计数器”标签。但是,是否可以通过一个控制器设置这个fxml页面?也许有其他的方法来代替主场景中的加载边界窗格。我将非常感谢你的帮助。
暂无答案!
目前还没有任何答案,快来回答吧!