在 Controller class 中访问以 FXML 制作的按钮(使用场景构建器)
Accessing button made in FXML (using scene builder) in Controller class
这是我的 fxml 代码的一部分
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.Hyperlink?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ToggleButton?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.shape.Rectangle?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="467.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="teacherattendencesystem.FXMLDocumentController">
<children>
<Label fx:id="header" layoutX="217.0" layoutY="14.0" minHeight="16" minWidth="69" text="UOS Teacher Attendance System">
<font>
<Font name="System Bold" size="36.0" />
</font>
</Label>
<Button fx:id="j1" layoutX="22.0" layoutY="166.0" mnemonicParsing="false" onAction="#marked" prefHeight="30.0" prefWidth="141.0" text="Eisha Tir Razia 1">
<font>
<Font name="System Bold" size="14.0" />
</font>
</Button>
这是我控制器的一部分class
import java.net.URL;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
public class FXMLDocumentController implements Initializable {
@FXML
private Label dayHeading;
private Button j1,j2,j3,j4,j5,j6,j7,j8,j9;
private boolean isSelected = false;
List<Button> room = new ArrayList();
@FXML
private void loadButtons(){
j1.setText("Room 1");
}
private String getDay(){
DayOfWeek dayOfWeek = DayOfWeek.from(LocalDate.now());
return (String) dayOfWeek.name();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
dayHeading.setText(getDay());
loadButtons();
}
}
但是当我 运行 代码时,我基本上得到一个空指针异常,即 j1 中没有任何内容。近一个小时以来,我一直在努力寻找原因,但我不知道自己做错了什么。
- 将fx:id分配给组件
- 在控制器中声明组件class
- 使用组件
现在,虽然我可以操纵标签,但无法操纵按钮。这是为什么?
只需将@FXML 注释添加到按钮即可:
@FXML
private Button j1;
FXML 加载程序注入的每个变量都必须用注释指明。
这是我的 fxml 代码的一部分
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.Hyperlink?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ToggleButton?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.shape.Rectangle?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="467.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="teacherattendencesystem.FXMLDocumentController">
<children>
<Label fx:id="header" layoutX="217.0" layoutY="14.0" minHeight="16" minWidth="69" text="UOS Teacher Attendance System">
<font>
<Font name="System Bold" size="36.0" />
</font>
</Label>
<Button fx:id="j1" layoutX="22.0" layoutY="166.0" mnemonicParsing="false" onAction="#marked" prefHeight="30.0" prefWidth="141.0" text="Eisha Tir Razia 1">
<font>
<Font name="System Bold" size="14.0" />
</font>
</Button>
这是我控制器的一部分class
import java.net.URL;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
public class FXMLDocumentController implements Initializable {
@FXML
private Label dayHeading;
private Button j1,j2,j3,j4,j5,j6,j7,j8,j9;
private boolean isSelected = false;
List<Button> room = new ArrayList();
@FXML
private void loadButtons(){
j1.setText("Room 1");
}
private String getDay(){
DayOfWeek dayOfWeek = DayOfWeek.from(LocalDate.now());
return (String) dayOfWeek.name();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
dayHeading.setText(getDay());
loadButtons();
}
}
但是当我 运行 代码时,我基本上得到一个空指针异常,即 j1 中没有任何内容。近一个小时以来,我一直在努力寻找原因,但我不知道自己做错了什么。
- 将fx:id分配给组件
- 在控制器中声明组件class
- 使用组件
现在,虽然我可以操纵标签,但无法操纵按钮。这是为什么?
只需将@FXML 注释添加到按钮即可:
@FXML
private Button j1;
FXML 加载程序注入的每个变量都必须用注释指明。