Java 访问控制器类中FXML(使用场景生成器)中创建的按钮

Java 访问控制器类中FXML(使用场景生成器)中创建的按钮,java,button,javafx,fxml,Java,Button,Javafx,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?> <

这是我的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>

这是我的控制器类的一部分

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();
}    
}
import java.net.URL;
导入java.time.DayOfWeek;
导入java.time.LocalDate;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.ResourceBundle;
导入javafx.event.ActionEvent;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
公共类FXMLDocumentController实现可初始化{
@FXML
自有标签日标;
专用按钮j1、j2、j3、j4、j5、j6、j7、j8、j9;
私有布尔值isSelected=false;
列表室=新的ArrayList();
@FXML
私有void加载按钮(){
j1.setText(“1号房间”);
}
私有字符串getDay(){
DayOfWeek DayOfWeek=DayOfWeek.from(LocalDate.now());
返回(字符串)dayOfWeek.name();
}
@凌驾
公共void初始化(URL、ResourceBundle rb){
setText(getDay());
加载按钮();
}    
}
但是当我运行代码时,我基本上得到了一个空指针异常,即j1中没有任何内容。我已经试着找出原因将近一个小时了,但我不知道我做错了什么

  • 将fx:id指定给组件
  • 在控制器类中声明组件
  • 使用组件

现在,虽然我能够操纵标签,但我无法操纵按钮。这是为什么?

只需将@FXML注释添加到按钮:

@FXML 
private Button j1;

FXML加载器注入的每个变量都必须用注释指示。

确保导入了
JavaFX
按钮
。在哪里调用
重命名按钮
?它是一个未使用fxml注释的私有方法,因此它必须是您未发布的控制器类的方法。但是代码似乎是正确的,这意味着您可能会执行以下操作:
someVariable=fxmloader.load(someUrl);FXMLDocumentController控制器=新的FXMLDocumentController();controller.MethodThatCallsNameButtons()修复该示例,使其构成一个完整的示例。正如fabian所说,您可能没有在实际控制器上调用此方法。@fabian我编辑并发布了我正在使用的全部代码。我在initialize方法中调用renameButtons方法,就像调用getDay()方法一样。您不应该在按钮声明上方添加
@FXML
注释吗?i、 e.
@FXML专用按钮j1