我尝试用自定义控制器制作一个自定义组件。自定义组件已经显示在应用程序上,但我未能向其添加属性。
项目结构:
package controller;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import java.net.URL;
import java.util.ResourceBundle;
public class TopBarBtn implements Initializable {
public ImageView getIv() {
return iv;
}
public HBox getHbox() {
return hbox;
}
@FXML private ImageView iv;
@FXML private HBox hbox;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
}
}
package custom;
import controller.TopBarBtn;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.image.Image;
import javafx.scene.layout.HBox;
import java.io.IOException;
public class TopBarCloseBtn extends HBox {
TopBarBtn controller;
private final StringProperty imageUrl = new SimpleStringProperty("/res/image/white/closeX.png");
public final StringProperty imageUrl() { return imageUrl; }
public final String getImageUrl() { return imageUrl.get(); }
public final void setImageUrl(String imageUrl) {
this.imageUrl.set(imageUrl);
controller.getIv().setImage(new Image(imageUrl));
}
public TopBarCloseBtn() {
super();
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/res/template/closeBtn.fxml"));
controller = new TopBarBtn();
loader.setController(controller);
Node n = loader.load();
this.getChildren().add(n);
controller.getIv().setImage(new Image(imageUrl.get()));
} catch (IOException e) {
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<HBox id="hbox" xmlns:fx="http://javafx.com/fxml/1" alignment="CENTER" prefHeight="27" prefWidth="40"
styleClass="TopBarButtonClose" stylesheets="@../style/TopBarButton.css">
<children>
<ImageView id="iv" fitHeight="13" fitWidth="13" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="/res/image/white/closeX.png"/>
</image>
</ImageView>
</children>
</HBox>
布尔马尔科
完全错误:
原因:java.lang.nullPointerException:无法调用“javafx.scene.image.imageeview.setimage(javafx.scene.image.image)”,因为“controller.topbarbtn.getiv()”的返回值在custom.topbarclosebtn.(topbarclosebtn.java:33)在java.base/jdk.internal.reflect.nativeconstructoraccessorimpl.newinstance0(原生方法)在在java.base/java.lang.reflect.constructor.newInstance(delegatingConstructorAccessorimpl.java:45)在java.base/java.lang.reflect.reflect.reflectAccess.newInstance(reflector.java:499)在java.base/java.lang.reflect.reflectAccess.newInstance(reflectAccess.newInstance(reflectorAccess.javinstance)在fxml/javafx.fxml.fxmlloader$valueelement.processStartElement(FxmlLoader.java:756)在javafx.fxml/javafx.fxml.fxml.fxmlLoader.loadimpl(FxmlLoader.java:2634)在javafx.fxml/javafx.fxml.fxmlLoader.loadimpl.
我的closeBTN.fxml中缺少fx:id!感谢@kleopatra
我正在尝试使用基于自定义列表的自定义创建一个自定义。 自定义对象是名为的类名,其中包含一些用于消息内容、收件人、时间戳和状态(读取、发送等)的字段。 在看了这个问题:用FXML在JavaFX中定制ListView之后,我成功地做到了: null 现在,ConversationCell类: 我不能显示ConversationCellController,但我所能说的是,这是我(在其构造函数中)加载设
本文向大家介绍Android自定义控件之自定义组合控件(三),包括了Android自定义控件之自定义组合控件(三)的使用技巧和注意事项,需要的朋友参考一下 前言: 前两篇介绍了自定义控件的基础原理Android自定义控件基本原理详解(一)、Android自定义控件之自定义属性(二)。今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发成本,以及维护成本。 使用自定义组合控件的好处? 我
这似乎是一种非常“愚蠢”的方式...有人知道更好的方法吗?也许java有一些内置的方法?
自定义控件用JavaScript和原生平台支持的语言编写。它们使用原生Tabris.js客户端的接口,并被封装在Cordova插件中。本文将介绍JavaScript的实现部分。 用JavaScript定义自定义控件 自定义控件必须继承自Widget。它能够与自定义控件的原生部分进行通信。 自定义控件类必须覆写_nativeType属性的getter以返回与原生实现匹配的类型: class MyCu
PyQt5 有丰富的组件,但是肯定满足不了所有开发者的所有需求,PyQt5 只提供了基本的组件,像按钮,文本,滑块等。如果你还需要其他的模块,应该尝试自己去自定义一些。 自定义组件使用绘画工具创建,有两个基本方式:根据已有的创建或改进;通过自己绘图创建。 Burning widget 这个组件我们会在 Nero,K3B,或者其他 CD/DVD 烧录软件中见到。 #!/usr/bin/python3
我正在用JavaFX制作一个2D游戏,当检测到冲突时,我得到的结果相当不准确,因为玩家精灵被设置为矩形的填充,因此没有预期的边框。有没有办法让我自己的形状尽可能准确? 我的另一个想法是检查碰撞的像素是否透明,然后如果它是,则不会结束游戏。有谁知道一种方法可以获得碰撞像素的坐标,以便从那里我可以使用PixelReader进行检查? 如果有人知道更好的方法,请告诉我! 谢谢,伊森