簡體   English   中英

從另一個類向標簽添加文本。 Java的

[英]Adding text to a label from another class. Java

在我的程序中,有兩個FormChecked類。

Form類中,有一個Label和一個Button 單擊Button我創建Checked類的實例並啟動其線程。

現在,我遇到的麻煩是我需要傳遞Checked類中的文本並更改Label值,但是我沒有成功。

這是我的代碼:

public class MainForm extends Application {
    protected static int intVerifiedNews = 0;
    Button btnPlay = new Button("Button");
    Label lbVerifiedNews = new Label("News: ");
    @Override
    public void start(Stage primaryStage) throws IOException {

        final BorderPane border = new BorderPane();
        final HBox hbox = addHBox();

        Scene scene = new Scene(border, 850, 500, Color.BLACK);

        btnPlay.setPrefSize(100, 24);
        btnPlay.setMinSize(24, 24);

        btnPlay.setOnAction((event) -> {
                    Checked ch = new Checked();
                    ch.start();
                }
        );

        border.setTop(hbox);
        hbox.getChildren().addAll(btnPlay, lbVerifiedNews);
        primaryStage.setScene(scene);
        primaryStage.show();

    }
    private HBox addHBox() {
        HBox hbox = new HBox();
        hbox.setPadding(new Insets(5, 0, 5, 5));
        return hbox;
    }

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

已檢查的班級:

public class Checked extends Thread {


    public void run() {
        for (int i = 0; i <= 5; i++) {
    MainForm.intVerifiedNews ++;
//Here you need to pass the intVerifiedNews value to the Label 
                System.out.println(MainForm.intVerifiedNews);
        }

    }
}

通常,您需要將對要更新的MainForm或form對象的引用傳遞到Checked類中,以便可以直接訪問其更新方法。

public class Checked implements Runnable {

   public Checked(MainForm form1) {
   // store form (or the object representing the text box directly) to update later
   }

   public void run() {
   }
}

lbVerifiedNews傳遞到Checked類的構造函數中,並將此引用存儲在字段中。

Checked ch = new Checked(lbVerifiedNews);

public class Checked extends Thread {

    Label checkedLabelReference;
    public Checked(Label label){
        this.checkedLabelReference = label;
    }

    public void run() {
        for (int i = 0; i <= 5; i++) {
            MainForm.intVerifiedNews ++;
            //Here you need to pass the intVerifiedNews value to the Label 
            Platform.runLater(new Runnable() {
                @Override public void run() {
                    checkedLabelReference.setText(MainForm.intVerifiedNews);//update text
            }});
            System.out.println(MainForm.intVerifiedNews);
        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM