为什么不能在Button事件下使用setText()?

时间:2018-07-22 17:13:39

标签: java javafx

因此,我正在将某种复杂的控制台程序重新制作为GUI。但是,我是没有经验的JavaFX用户。

Label cityNameLabel = (Label) scene.lookup("#cityNameLabel");
cityNameLabel.setText("No text");

Button startButton = (Button) scene.lookup("#startButton");

我在这里成功启动了我的标签。此时,我仍然可以使用cityNameLabel.setText();。它将起作用。

这继续:

startButton.setOnAction(e -> {
    String enteredUrl = linkField.getText();
    if(isValidUrl(enteredUrl)) {
        try {
            cityNameLabel.setText("Test");
            doJob(enteredUrl, cityNameLabel);
        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
    }.........

当我尝试在此处更改标签时,它不会发生。我实际上需要做的是将cityNamelLabel引用到doJob()方法,而我想通过doJob()方法进行更改(一旦找到城市名称)。

谁能给我一个解决方案,让我做我想做的事情? (之后从doJob()更改它)。谢谢!

编辑:在这里,我发布了最小版本的尝试。我希望足够了

package net.maty;

public class Katastr extends Application {

final String programName = "KatastRED";

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage mainStage) throws Exception {
    try {
        mainStage.setTitle(programName);
        mainStage.setResizable(false);
        BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("Katastr.fxml"));
        Scene scene = new Scene(root,800,500);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

        ChoiceBox threadNumberBox = (ChoiceBox) scene.lookup("#threadNumberBox");
        threadNumberBox.getSelectionModel().select(5);

        TextField linkField = (TextField) scene.lookup("#linkField");
        //debug
        linkField.setText("https://regiony.kurzy.cz/katastr/stary-kolin/objekty?strana=");
        //

        Text cityNameText = (Text) scene.lookup("#cityNameText");

        Button startButton = (Button) scene.lookup("#startButton");
        //HERE IS THE THING. EVERYTHING WORKS WELL EXCEPT THE FACT I CANT CHANGE CITYNAMETEXT
        startButton.setOnAction(e -> {
            String enteredUrl = linkField.getText();
            if(isValidUrl(enteredUrl)) {
                try {
                    cityNameText.setText("Example that will not show because it doesnt work.");
                    doJob(enteredUrl, cityNameText);
                } catch (IOException e1) {
                    e1.printStackTrace();
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
            }
            else {
                Alert alert = new Alert(AlertType.ERROR);
                alert.setTitle("Chyba!");
                alert.setHeaderText(null);
                alert.setContentText("Chybně zadané URL!");
                alert.showAndWait();
            }
        });
        mainStage.setScene(scene);
        mainStage.show();


    } catch(Exception e) {
        e.printStackTrace();
    }

}

public static void doJob(String validatedUrl, Text cityNameText) throws IOException, InterruptedException {
    Scanner in = new Scanner(System.in);
    String url = validatedUrl;      

    String cityName = getCityName(url);
    cityNameText.setText(cityName);

    List<String> parcelLinks = getParcelLinks(url);.....
}


public static List<String> getParcelLinks(String url) throws IOException{
}

public static List<String> getAdressesFromPage(Document doc) {
}


public static List<String> createParcelUrls(List<String> links) throws IOException {
}


public static boolean isValidUrl(String url) {
}

public static String getCityName(String url) throws IOException {
}




}

0 个答案:

没有答案