这是我的问题,我有一个将信息从数组列表加载到特定窗格的方法:
public void LoadData(Pane pane, String fxid, int noAtm) {
// Pane pane = (Pane) loader.getNamespace().get(fxid);
Label simbolo = (Label) pane.lookup("#Simbolo" + fxid);
Label atmass = (Label) pane.lookup("#MasaAtomica" + fxid);
Label numOx = (Label) pane.lookup("#NumOx" + fxid);
Label nombre = (Label) pane.lookup("#Nom" + fxid);
Label numAtm = (Label) pane.lookup("#NumAtm" + fxid);
for (Datos d : datosList) {
if (d.getNumeroAtomico() == noAtm) {
simbolo.setText(d.getSimbolo());
atmass.setText(Double.toString(d.getMasaAtomica()));
numOx.setText(d.getNumeroOxidacion());
nombre.setText(d.getNombre());
numAtm.setText(Integer.toString(d.getNumeroAtomico()));
break;
}
} }
它有效,但我不知道如何指定将从 fxml 文件中使用的窗格
我用一种方法对其进行了测试,当您将鼠标悬停在窗格上时,它会检测它是哪个窗格,因此它调用此方法并将该窗格作为参数传递在这里是该方法:
@FXML
private void handleMouseEntered(MouseEvent event) {
Pane pane = (Pane) event.getSource();//crea una varibale local basada en el pane
String id = pane.getId(); // obtiene el id basado en el pane
Datos dummy = new Datos (null, null, 0, 0, null);
dummy.LoadData(pane, id, 3);
}
到目前为止一切都很好,但我需要 LoadData 方法能够在不需要鼠标事件的情况下工作。尝试创建一个创建本地窗格的方法,将您将从中工作的那个指定为 fxid,然后调用将本地窗格作为参数传递的方法,但它返回一个错误,我认为这是因为创建该方法时它是一个独立于 fxml 文件的窗格,方法是:
private void charge(String id) {
Pane pane = new Pane();
pane.setId(id);
Datos dummy2 = new Datos (null, null, 0, 0, null);
dummy2.LoadData(pane, id, 3);
}
我还尝试修改该方法,它根据作为参数传递的 fxid 创建一个窗格,但它再次显示相同的错误所以我想同样的事情发生了,这是我尝试“修复”它:
public void LoadData( String fxid, int noAtm) {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Escena.fxml"));
Pane pane = (Pane) loader.getNamespace().get(fxid);
Label simbolo = (Label) pane.lookup("#Simbolo" + fxid);
Label atmass = (Label) pane.lookup("#MasaAtomica" + fxid);
Label numOx = (Label) pane.lookup("#NumOx" + fxid);
Label nombre = (Label) pane.lookup("#Nom" + fxid);
Label numAtm = (Label) pane.lookup("#NumAtm" + fxid);
for (Datos d : datosList) {
if (d.getNumeroAtomico() == noAtm) {
simbolo.setText(d.getSimbolo());
atmass.setText(Double.toString(d.getMasaAtomica()));
numOx.setText(d.getNumeroOxidacion());
nombre.setText(d.getNombre());
numAtm.setText(Integer.toString(d.getNumeroAtomico()));
break;
}
} }
这是以这些方式调用方法时产生的错误: 因此,如果有人知道如何根据 fxml 文件中的窗格创建窗格并在 fxid 的帮助下执行此操作,请告诉我该怎么做 pls