当前位置: 首页 > 知识库问答 >
问题:

JavaFX刷新警报

拓拔嘉颖
2023-03-14

你好,我有一个应用程序有警报,在用户没有响应后,我想刷新警报/再次显示它,但由于某些原因,我没有看到第二个警报,它是空的,像:

我关闭警报,如果它显示,所以我不知道为什么下一个警报是空的。包装应用;

//imports

public class Main extends Application{

    int number = 50;
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        alertMethod();
    }


    private void alertMethod() {
        number += number + 10;
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
        alert.setTitle("Title");
        alert.setHeaderText("Number " + number);
        alert.setContentText("Choose your option.");     

        ButtonType buttonTypeOne = new ButtonType("Yes");
        ButtonType buttonTypeCancel = new ButtonType("No", ButtonBar.ButtonData.CANCEL_CLOSE);
        alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeCancel);

        Thread newThread = new Thread(new Runnable() {
            @Override
                public void run() {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException ex) {
                        Thread.currentThread().interrupt();
                    }

                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {
                            if(alert.isShowing()) {
                                alert.close();
                            }
                            alertMethod();
                        }
                        });
                    }
            });
            newThread.start();
        Optional<ButtonType> result = alert.showAndWait();
        if (result.get() == buttonTypeOne){
            System.out.println("Pressed Yes");
         } else if (result.get() == buttonTypeCancel) {
            System.out.println("Pressed No");
         }
    }
}

共有1个答案

堵才哲
2023-03-14

这只是对我认为你想要什么的猜测。你的问题不是很清楚。这个应用程序从这里使用@Sergey Grinev代码。它每两秒钟更新一次警报

//imports
import java.util.Optional;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType;
import javafx.stage.Stage;
import javafx.util.Duration;

public class Main extends Application
{

    int number = 50;

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

    @Override
    public void start(Stage primaryStage) throws Exception
    {
        alertMethod();
    }

    private void alertMethod()
    {

        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
        alert.setTitle("Title");
        alert.setHeaderText("Number " + number);
        alert.setContentText("Choose your option.");

        ButtonType buttonTypeOne = new ButtonType("Yes");
        ButtonType buttonTypeCancel = new ButtonType("No", ButtonBar.ButtonData.CANCEL_CLOSE);
        alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeCancel);

        Timeline twoSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(2), new EventHandler<ActionEvent>()
        {
            @Override
            public void handle(ActionEvent event)
            {
                number = number + 10;
                alert.setAlertType(Alert.AlertType.CONFIRMATION);
                alert.setTitle("Title -> " + number);
                alert.setHeaderText("Number " + number);
                alert.setContentText("Choose your option.");
            }
        }));
        twoSecondsWonder.setCycleCount(Timeline.INDEFINITE);
        twoSecondsWonder.play();

        Optional<ButtonType> result = alert.showAndWait();
        if (result.get() == buttonTypeOne) {
            System.out.println("Pressed Yes");
        }
        else if (result.get() == buttonTypeCancel) {
            System.out.println("Pressed No");
        }
    }
}
 类似资料:
  • 问题内容: 我正在尝试创建一个程序来模拟使用Java和JavaFX解决Rubik’s Cube的问题。该场景具有一个文本框,该文本框将以正确的方式显示计算机所做的每一步。文本框旁边有一个展开的多维数据集,其中 应 显示该多维数据集的当前状态。 问题在于,GUI只会更新以显示移动列表,并且在所有进程的最后都显示多维数据集的状态。我已经浏览了文档,该站点上的其他问题,其他站点上的其他问题,但找不到任何

  • 问题内容: 我有这个常见的问题,看来是这样。重置项目后,我的表格视图不会刷新我的项目。我检查了数据,这是新的数据。 我尝试了多种互联网解决方案,但没有成功。 无法重置所有列,因为它会额外增加一个空一(不知道为什么),并且调整大小会中断。 我的表不可编辑。新数据已更改。 如果更改项目的顺序并且行更改(:|),则刷新数据。 我只是没有想法。 目前,刷新代码非常简单。 同样,新数据是正确的。当我对tab

  • 我有这个共同的问题,因为它似乎是。我的表视图将不会刷新我的项目后,我重置他们。我查过资料了,是新的。 我从网上尝试了多种解决方案,但没有成功。 目前,刷新代码非常简单。 新的数据也是正确的。当我选择tableView时,它返回新的正确项。

  • 如果我想在某个任意ObservableValue已更改但基础TableView数据未更改的情况下使TableView刷新(而不调用refresh()方法),那么对提取器回调方法进行自适应是否是一个好的解决方案? 这是一个使用TableView刷新()方法的实现示例。 当之前有人问过类似的问题时,@kleopatra表示“不,永远不要使用刷新。” 我有一个底层数据没有变化的情况,只是它在TableV

  • 在JavaFX中,我怎么能让一个矩形闪烁到视图之外。 我正在制作一个单词搜索游戏,我有一个随机的2D数组。我正在将此数组打印到600x600画布上,如下所示: 我也有一个正方形绘制在同一画布上,就像这样: 这意味着我可以通过增加和来移动正方形。这给了:这个。 现在唯一的问题是,我需要一个矩形来闪烁,这样当选中时,下面的字母仍然可见。我该怎么做?我尝试将颜色设置为不透明,但这也会导致游戏板的其他部分

  • 你好, 我有一个问题,使ListView更新“良好”。这是一个包含一堆播放列表项的播放列表。基本上,当项的样式或内容发生变化时,我希望它在ListView中发生变化。当前,我刷新了整个列表,我猜这是可行的,但它似乎是一个很差(不清楚)的解决方案对我来说(它闪烁)。有没有一种方法可以刷新/重绘一个特定的物品?我还没找到。 null