【发布时间】:2021-03-28 12:00:58
【问题描述】:
我 had a question earlier 关于如何在 JavaFX FXML 中将窗格添加到 VBox。我现在的问题是如何编辑我添加的窗格中的内容? FXML 文件的代码仍然相同。新编辑的Java代码如下:
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
public class HotelReservationController implements Initializable{
@FXML
private ScrollPane scrollPaneContent;
@FXML
private VBox vboxData;
@FXML
private AnchorPane cardAnchor;
@FXML
private HBox cardHBox;
@FXML
private Text cardTitle;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
URL cardURL = getClass().getResource("/application/Cards.fxml");
// vboxData.getChildren().add(cardAnchor);
for (int j = 0; j < 10; j++) {
Parent cardAnchor=null;
Parent cardHBox=null;
Parent cardTitle=null;
try {
cardAnchor = FXMLLoader.load(cardURL);
cardHBox= FXMLLoader.load(cardURL);
cardTitle = FXMLLoader.load(cardURL);
cardTitle.setText("test" + j);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
vboxData.getChildren().add(cardAnchor);
}
try {
connectToHotel();
} catch (ClassNotFoundException | SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
但是,当我这样做时,我遇到了以下错误:
javafx.fxml.LoadException:
/C:/Users///////bin/application/HotelReservation.fxml
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at application.Main.start(Main.java:18)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassCastException: javafx.scene.layout.AnchorPane cannot be cast to javafx.scene.text.Text
at application.HotelReservationController.initialize(HotelReservationController.java:55)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
... 17 more
如何添加此文本字段和其他文本字段(我猜处理图像窗格和按钮类似于处理它们)?
【问题讨论】:
-
该代码无法编译;
Parent没有setText()方法。你需要在控制器上调用一个方法,见stackoverflow.com/questions/14187963/… -
所以据我了解,我需要有一个用于 Cards.fxml 的控制器,在该控制器中我创建了一个动态更改文本的方法,我只是调用该方法。然后我加载 cardAnchor 属性,然后它应该自动设置它?
-
“编辑文本/图像/按钮”是什么意思?编辑按钮意味着什么?谁在进行编辑,是最终用户还是您程序中的某些人?您能否提供一个编辑示例以及它对您希望使其可编辑的每一件事的作用? user editable label 的示例在这里,但我认为这不是您真正要问的。
-
所以,我有一个看起来像卡片的布局,我想将它动态添加到滚动窗格中的 VBox 中。该卡片有一个图像视图和 4 个文本:标题、位置、评级和描述,它还有一个按钮,按下时将导致一个新视图。在链接的问题中,我问如何将卡片动态添加到 VBox(所有代码都在那里),它就像@James_D 所说的那样工作。但是当我尝试动态编辑文本时(我想从数据库中提取数据,然后编辑 For 循环中的每个字段,但直到现在我只是在测试,所以我还没有连接它// 没有工作)。
标签: java eclipse javafx fxml scenebuilder