有没有办法指定 fxml 文件的窗格?

问题描述 投票:0回答:0

这是我的问题,我有一个将信息从数组列表加载到特定窗格的方法:

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;
                    }
                }   }

这是以这些方式调用方法时产生的错误:I only know that it mentions that the pane is empty, at other times it mentioned that the labels are 因此,如果有人知道如何根据 fxml 文件中的窗格创建窗格并在 fxid 的帮助下执行此操作,请告诉我该怎么做 pls

java javafx fxml
© www.soinside.com 2019 - 2024. All rights reserved.