Java 使用invokeLater逐个显示对话框
在两个不同的操作侦听器中,当满足某些条件时,将显示一个对话框。 如果两个操作侦听器都需要显示对话框,则将同时显示两个对话框。但我想让他们一个接一个地看 简化代码:Java 使用invokeLater逐个显示对话框,java,swing,user-interface,invokelater,Java,Swing,User Interface,Invokelater,在两个不同的操作侦听器中,当满足某些条件时,将显示一个对话框。 如果两个操作侦听器都需要显示对话框,则将同时显示两个对话框。但我想让他们一个接一个地看 简化代码: SwingUtilities.invokeLater(new Runnable() { public void run() { JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 1");
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 1");
}
});
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 2");
}
});
这两个“SwingUtilities.invokeLater”调用位于不同的类中。创建一个跟踪该类的类;此类将包含要显示的对话框队列;每当对话框关闭时,将显示队列中的第一个对话框并将其从队列中删除。当另一个类需要显示对话框时,如果队列为空或插入到队列中,则会立即显示对话框。这与对话框的形式有关。关于这个话题有很多有用的文章。对话框具有不同的模态类型和不同的优先级。您可以通过创建优先级较低的第二个对话框来解决问题:
JOptionPane pane = new JOptionPane("dialog 2", JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog("Message");
dialog.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
dialog.setVisible(true);
希望这能有所帮助 如果需要,此方法将等待Runnable完成
或者在您的情况下,当第一个对话框关闭时。可能还涉及到时间问题。当从事件分派中短时间连续调用两个对话框时,它对我有效。当从不同的类提交时,情况可能会有所不同。为什么要同时调用两个不同的ActionListens?听起来像是设计问题。您应该有一个单独的ActionListener来执行多个编辑(或其他)。然后可以分别调用每个编辑并分别显示其显示对话框。