我有一个在场景构建器中创建的自定义界面,我想在使用子类创建的变体中重用它。问题似乎是它不会继承标有@FXML 的方法。有没有办法扩展一个加载 fxml 而不是复制整个类的类?
示例父类:
public class Browser extends StackPane implements Initializable {
public Browser() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxml/Browser.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
// Adds a new tab.
@FXML
private void addTab(ActionEvent event) {
BrowserTab tab = new BrowserTab();
tab.getEngine().load(initialTab.getAddress());
if (tabs.getTabs().size() >= TABMAX + 1) {
BaseApp.showNotify("You may open a maximum of " + TABMAX + " tabs.");
} else {
tabs.getTabs().add(tabs.getTabs().size() - 1, tab.tab);
}
}
}
示例子类:
public class AdBrowser extends Browser {
public AdBrowser() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxml/AdBrowser.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
}
当我尝试运行实例化子类的程序时,我得到并错误提示找不到控制器方法“addTab”。