简体   繁体   中英

Adding text to a label from another class. Java

In my program, there are two Form and Checked classes.

In the Form class, there is a Label and a Button . At the click in the Button I create an instance of the class Checked and start its thread.

Now, what I'm having trouble with is that I need to pass the text from the Checked class and change the Label value, but I have not succeeded.

Here is my code:

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

Checked class:

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

    }
}

Generically you'll want to pass reference to the MainForm or form object that you want to update into your Checked class so that you have access to its update methods directly.

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() {
   }
}

Pass lbVerifiedNews into the constructor of the Checked class and store this reference in a field.

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

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM