JavaFX通过单击按钮更改文本

JavaFX通过单击按钮更改文本,java,javafx,Java,Javafx,下面的任务:我想要一个带有字母'L'的文本和两个按钮s,一个用于“增加”字母,另一个用于“减少”字母。但仅在到达字母'A'或'Z'之前。到了我可以增加/减少字母的程度,直到达到所希望的字母。唯一的问题是:当我进入'Z',然后单击按钮返回时,它会将字母再次增加到'['。我感觉文本对按钮的反应不正确。如果描述令人困惑,很抱歉 public class Main extends Application implements EventHandler<ActionEvent> { p

下面的任务:我想要一个带有字母
'L'
的文本和两个
按钮
s,一个用于“增加”字母,另一个用于“减少”字母。但仅在到达字母
'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++));
        }
    }
}
public类主扩展应用程序实现EventHandler{
私有字符defaultLetter='L';
私人按钮btnred;
专用按钮绿色;
私人文本;
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage)引发异常{
btnred=新按钮();
btnred.setText(“先前”);
btnred.getStyleClass().add(“绿色btn小字体”);
btnred.setOnAction(本);
btnred.setStyle(“-fx字体:22 arial;-fx基:#E70116;”);
btngreen=新建按钮();
btngreen.setText(“下一步”);
btngreen.getStyleClass().add(“红色btn小字体”);
btngreen.setOnAction(本);
btngreen.setStyle(“-fx字体:22 arial;-fx基:#01E736;”);
text=新文本();
text.setText(String.valueOf(defaultLetter));
text.setStyle(“-fx字体:22 arial;”);
BorderPane=新的BorderPane();
窗格。设置顶部(文本);
窗格设置为左(绿色);
窗格。设置权限(btnred);
场景=新场景(窗格);
阶段。片名(“Hausaufgabe 1”);
第二阶段:setX(400);
赛蒂(200);
舞台设置高度(500);
舞台设置宽度(500);
舞台场景;
stage.show();
}
@凌驾
公共无效句柄(ActionEvent事件){
if((event.getSource()==btnred)&&defaultLetter>='A'){
text.setText(String.valueOf(defaultLetter--));
}
if((event.getSource()==btngreen)&&defaultLetter
if((event.getSource()==btnred)&&defaultLetter>A'){
默认字母--;
text.setText(String.valueOf(defaultLetter));
}
if((event.getSource()==btngreen)和&defaultLetter<'Z'){
defaultLetter++;
text.setText(String.valueOf(defaultLetter));
}
如果((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'));
ObjectProperty字母=新的SimpleObjectProperty('L');
btnred.setOnAction(evt->{
char newLetter=(char)(letter.get()-1);
//只是检查一下演示
//禁用绑定应防止触发该操作
//当下列条件为false时
如果(新字母>='A'){
字母.set(newLetter);
}
});
btngreen.setOnAction(evt->{
char newLetter=(char)(letter.get()+1);
//只是检查一下演示
//禁用绑定应防止触发该操作
//当下列条件为false时

if(newLetter您应该在递增/递减后读取新字母。此外,如果可能来源的功能完全不同,则不应该对多个按钮使用相同的事件处理程序(在您的情况下,最多可以输入一个
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'));
ObjectProperty字母=新的SimpleObjectProperty('L');
btnred.setOnAction(evt->{
char newLetter=(char)(letter.get()-1);
//只是检查一下演示
//禁用绑定应防止触发该操作
//当下列条件为false时
如果(新字母>='A'){
字母.set(newLetter);
}
});
btngreen.setOnAction(evt->{
char newLetter=(char)(letter.get()+1);
//只是检查一下演示
//禁用绑定应防止触发该操作
//当下列条件为false时

如果(newLetter)你的条件是
你的条件是
text.setText(String.valueOf(++defaultLetter));
哇,这其实很明显。非常感谢!
text.setText(String.valueOf(++defaultLetter));
哇,这其实很明显。非常感谢!