Jav*_*aSa 5 java swing joptionpane
正如你从我上面的主题中看到的
那样,我想知道如何解雇由于另一个JOptionPane而变得无关紧要的JOptionPane,并且由于某些原因,用户没有通过单击ok按钮解除第一个问题(对于例).
我在其他网站上看到过一些类似问题的软件,人们建议简单地做:
JOptionPane.getRootFrame().dispose();
Run Code Online (Sandbox Code Playgroud)
但是我如何为每个JOptionPane存储一个引用,并且只能解雇那个想要的引用.
谢谢
编辑:
代码示例:
package Gui;
import javax.swing.JOptionPane;
import java.awt.*;
/**
*
* @author
*/
public class JpanelMainView extends javax.swing.JPanel {
/** Creates new form JpanelMainView */
public JpanelMainView() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(149, 149, 149)
.addComponent(jButton1)
.addContainerGap(178, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(77, 77, 77)
.addComponent(jButton1)
.addContainerGap(200, Short.MAX_VALUE))
);
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
JOptionPane.showMessageDialog(this, "Board was sent for validation check\n Please wait...","Board Sent",JOptionPane.INFORMATION_MESSAGE);
//Please note that this OptionPane is coming in my real program always after the first JoptionPane
//I want that if I've reached the line in the code that need to show this second JoptionPane, I will first close the first JoptionPane
//Else you will dismiss the last JoptionPane and then the first one and I don't want to give the user two JoptionPane to close, it's annoying.
JOptionPane.showMessageDialog(this, "Set your move now please","Game started",JOptionPane.INFORMATION_MESSAGE);
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}
Run Code Online (Sandbox Code Playgroud)
我会建议你
done()后台任务完成时调用的SwingWorker 方法中,处理JDialog.例如,以下代码使用Thread.sleep(3000)进行3秒睡眠,以模拟需要3秒的后台任务.然后它会关闭第一个对话框并显示第二个对话框:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane messagePane = new JOptionPane(
"Board was sent for validation check\n Please wait...",
JOptionPane.INFORMATION_MESSAGE);
final JDialog dialog = messagePane.createDialog(this, "Board Sent");
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
// do your background processing here
// for instance validate your board here
// mimics a background process that takes 3 seconds
// you would of course delete this in your actual progam
Thread.sleep(3000);
return null;
}
// this is called when background thread above has completed.
protected void done() {
dialog.dispose();
};
}.execute();
dialog.setVisible(true);
JOptionPane.showMessageDialog(this, "Set your move now please",
"Game started", JOptionPane.INFORMATION_MESSAGE);
}
Run Code Online (Sandbox Code Playgroud)