建立java 模式对话框_java - 从头开始创建模式对话框 - 堆栈内存溢出

我正在尝试为用户单击按钮时打开的覆盖对话框创建自己的实现。 您在下面看到的代码可以很好地工作,但不是那么漂亮。 我正在寻找一种实现,无需为我创建的每个对话框都创建线程。 有什么办法可以做到这一点?

我一直在浏览各种Java源文件(例如JOptionPane和JDialog以弄清楚它们是如何执行的,以便在用户关闭对话框之前阻塞线程,但我没有设法理解它。 另外,我尝试了各种代码片段,包括EventQueue ,例如EventQueue.invokeLater或EventQueue.invokeAndWait 。

// MainViewController.java

@FXML

private void handleServerButton(ActionEvent evt){

Thread t = new Thread(() -> {

if (serverD.showDialog(overlay) == Dialog.OK_OPTION){

System.out.println("OK");

} else {

System.out.println("ABORT");

}

});

t.start();

}

// Dialog.java

public int showDialog(Pane parent) {

latch = new CountDownLatch(1);

this.result.set(NONE);

approveButton.setDefaultButton(true);

abortButton.setCancelButton(true);

container.setVisible(true);

parent.setVisible(true);

try {

latch.await();

} catch (InterruptedException ex){ }

approveButton.setDefaultButton(false);

abortButton.setCancelButton(false);

container.setVisible(false);

parent.setVisible(false);

return result.get();

}

@Override

public void changed(ObservableValue extends Integer> observable, Integer oldValue, Integer newValue) {

if (newValue != NONE)

latch.countDown();

}

外观如下所示(请注意:覆盖对话框不是窗口本身,而是主窗口中的窗格):

最后结果

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9idlRoZi5wbmc=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值