簡體   English   中英

JavaFX通過單擊按鈕來更改文本

[英]JavaFX change Text by clicking on Button

接下來的任務:我想要一個帶有字母'L'和兩個Button的文本,一個用來“增加”,另一個用來“減少”該字母。 但僅在到達字母'A''Z' 我可以增加/減少字母,直到希望的字母為止。 唯一的問題:當我到達'Z'然后單擊按鈕返回時,它將字母再增加一次到'[' 我感覺文本對按鈕的反應不正確。 抱歉,說明令人困惑

public class Main extends Application implements EventHandler<ActionEvent> {
    private Character defaultLetter = 'L';

    private Button btnred;
    private Button btngreen;
    private Text text;


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

    }

    @Override
    public void start(Stage stage) throws Exception {
        btnred = new Button();
        btnred.setText("Previous");
        btnred.getStyleClass().add("green-btn-small-font");
        btnred.setOnAction(this);
        btnred.setStyle("-fx-font: 22 arial; -fx-base: #E70116;");

        btngreen = new Button();
        btngreen.setText("Next");
        btngreen.getStyleClass().add("red-btn-small-font");
        btngreen.setOnAction(this);
        btngreen.setStyle("-fx-font: 22 arial; -fx-base: #01E736;");

        text = new Text();
        text.setText(String.valueOf(defaultLetter));
        text.setStyle("-fx-font: 22 arial;");
        BorderPane pane = new BorderPane();
        pane.setTop(text);
        pane.setLeft(btngreen);
        pane.setRight(btnred);

        Scene scene = new Scene(pane);
        stage.setTitle("Hausaufgabe 1");
        stage.setX(400);
        stage.setY(200);
        stage.setHeight(500);
        stage.setWidth(500);
        stage.setScene(scene);
        stage.show();

    }


    @Override
    public void handle(ActionEvent event) {
        if ((event.getSource() == btnred) && defaultLetter >= 'A') {
            text.setText(String.valueOf(defaultLetter--));
        }
        if ((event.getSource() == btngreen) && defaultLetter <= 'Z') {
            text.setText(String.valueOf(defaultLetter++));
        }
    }
}
if ((event.getSource() == btnred) && defaultLetter > 'A') {
    defaultLetter--;
    text.setText(String.valueOf(defaultLetter));
}
if ((event.getSource() == btngreen) && defaultLetter < 'Z') {
     defaultLetter++;
     text.setText(String.valueOf(defaultLetter));
}

您需要每次更新defaultLetter值

遞增/遞減后,您應該閱讀新字母。 此外,如果可能的源功能完全不同(在您的情況下,最多只能輸入一個if正文之一),則不應對多個按鈕使用相同的事件處理程序。

另外,由於您在更新字母之前進行了檢查,因此如果defaultLetter == boundChar ,您將無法進行遞增。

最好做這樣的事情:

ObjectProperty<Character> letter = new SimpleObjectProperty<>('L');
btnred.setOnAction(evt -> {
    char newLetter = (char) (letter.get() - 1);

    // just checking for demonstration
    // disable binding should prevent the action from triggering
    // when the following condition is false
    if (newLetter >= 'A') {
        letter.set(newLetter);
    }
});
btngreen.setOnAction(evt -> {
    char newLetter = (char) (letter.get() + 1);

    // just checking for demonstration
    // disable binding should prevent the action from triggering
    // when the following condition is false
    if (newLetter <= 'Z') {
        letter.set(newLetter);
    }
});

text.textProperty().bind(letter.asString());
btnred.disableProperty().bind(letter.isEqualTo('A'));
btngreen.disableProperty().bind(letter.isEqualTo('Z'));

暫無
暫無

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

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