[英]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.