Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何适当地使文本和文本颜色在4种颜色之间切换/更改?_Java_Javafx_Colors_Toggle - Fatal编程技术网

Java 如何适当地使文本和文本颜色在4种颜色之间切换/更改?

Java 如何适当地使文本和文本颜色在4种颜色之间切换/更改?,java,javafx,colors,toggle,Java,Javafx,Colors,Toggle,目前,我已将JavaFX代码设置为在蓝色和红色之间切换。当程序运行时,带有文本“更改为红色”的按钮以蓝色文本显示。如果我点击按钮,它会变为红色文本写的“变为蓝色”。如果我再次单击它,循环将重新开始。我想做的是应用相同的图案,但使用四种颜色。例如,我希望从以下内容开始: “改为红色”,用蓝色文字书写 然后在点击之后 “改为绿色”,用红色文字书写 然后在点击之后 “变为紫色”,用绿色文字书写 然后在点击之后 “改为蓝色”,用紫色文字书写 然后在单击后,使用以下命令重新开始循环: “改为红色”,用蓝色

目前,我已将JavaFX代码设置为在蓝色和红色之间切换。当程序运行时,带有文本“更改为红色”的按钮以蓝色文本显示。如果我点击按钮,它会变为红色文本写的“变为蓝色”。如果我再次单击它,循环将重新开始。我想做的是应用相同的图案,但使用四种颜色。例如,我希望从以下内容开始:

“改为红色”,用蓝色文字书写

然后在点击之后

“改为绿色”,用红色文字书写

然后在点击之后

“变为紫色”,用绿色文字书写

然后在点击之后

“改为蓝色”,用紫色文字书写

然后在单击后,使用以下命令重新开始循环:

“改为红色”,用蓝色文字书写

等等等等

这是两种颜色的代码:

public class FirstUserInput extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Change to Red");
        btn.setTextFill(Color.BLUE);

    btn.setOnAction(e -> {
        if (btn.getTextFill() == Color.RED) {
            btn.setText("Change to Red");
            btn.setTextFill(Color.BLUE);
        } else {
            btn.setText("Change to Blue");
            btn.setTextFill(Color.RED);
        }
    });

有人能帮我把这段代码改成四种颜色吗?

如果你想减少用if-else语句编写的代码,那么可以使用数组或枚举来保存所有选项,并在每个操作事件上选择正确的选项,如:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class TestApp extends Application {

    private int index = 0;

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Change to Red");

        String allTexts[] = { "Change to Red", "Change to Blue", "Change to Green", "Change to Pink" };
        Color allColors[] = { Color.BLUE, Color.RED, Color.PINK, Color.GREEN };

        btn.setOnAction(e -> {

            index++;
            if(index >= allTexts.length ) {
                index = 0;
            }

            btn.setText(allTexts[index]);
            btn.setTextFill(allColors[index]);

        });

        VBox box = new VBox();
        box.getChildren().add(btn);

        primaryStage.setScene(new Scene(box));
        primaryStage.show();
    }

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

当这些变化是连续的时,上面的方法就起作用了。我希望你正在寻找的是。

为什么你不把你所拥有的扩展到三个if语句呢?我试过了,但没有用。顺序和颜色都混在一起了。它说找不到可变索引。我现在正试图纠正这一点。如果您能提供帮助,请告诉我如何解决此问题。@Eatel正如我在代码中指出的那样,您需要将索引变量定义为global like
private int index=0无论如何,我会更新我的答案,给出一个完整的例子。它不正确。颜色与文本不匹配。当它应该变成蓝色时,它会变成粉红色,反之亦然。这是因为我只是添加了我选择的颜色,而不是你的。。您所要做的就是修改allColors数组并将其放入所需的颜色中。同样的逻辑也适用于所有你想按顺序显示的文本。是的,我很快就明白了。糟糕的是,我忘了回答,就睡着了。谢谢,我给你绿色的复选标记。