我有一个条件,条件通过,我将展示一个JDialog。如果失败,我只需要显示一个JOption窗格并处理JDialog。 EX。我必须在按钮上单击显示对话框,
import javax.swing.JDialog;
import javax.swing.JLabel;
public class MyDialog extends JDialog {
public MyDialog(String name){
JLabel welcomeLable = new JLabel("Hi welcome");
add(welcomeLable);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setSize(100, 100);
if(name.equals("pass")){
//Do nothing
}else{
dispose();
}
}
public static void main(String[] d){
MyDialog dialog = new MyDialog("fail");
dialog.setModal(true);
dialog.show();
}
}
显示消息框并显示验证消息,但仍显示对话框。怎么解决这个问题。 怎么解决这个问题。
答案 0 :(得分:1)
将您的逻辑与对话框分开。你的对话框不应该决定它是否应该被显示,这不是它的工作。让你的代码这样做......
public class MyDialog extends JDialog {
public MyDialog(String name){
JLabel welcomeLable = new JLabel("Hi welcome");
add(welcomeLable);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setSize(100, 100);
}
public static void main(String[] d){
if(name.equals("pass")){
MyDialog dialog = new MyDialog("fail");
dialog.setModal(true);
dialog.show();
}
}
}
我还建议您考虑查看JOptionPane
,这可以大大减少您可能需要使用的重复代码量。
有关详细信息,请查看How to Make Dialogs
答案 1 :(得分:0)
猜测你的电话应该是super.dispose(); 因为还要指示要使用它的dispose方法准备好使用它的dispose方法的Window类(通过调用super();作为类中构造函数的第一行。 另外,因为它可能是在层次结构中爬行以在JDialog扩展的Window类中找到它,所以它可能在范围上有点屏蔽。
答案 2 :(得分:0)
如果不改变逻辑(和代码),就不可能得到你想要的东西。
在main
方法中,#show()
方法在构造函数结束之后被称为 ,因此之后<{strong>方法。
这只是第一个问题(在#dispose()
之前调用#dispose()
),第二个问题是,即使你设法以某种方式处理/关闭对话框,你也可以调用#show()
将有一个闪烁,因为对话框将会显示,并在下一刻隐藏。
此致
答案 3 :(得分:0)
首先关闭:show()
现已弃用。而是使用pack()
后跟setVisible(true)
。
关于您的问题:问题是即使已经处理了对话框,仍然可以显示/设置对话框。从逻辑的角度来看,这可能没有意义,但这就是实现的行为方式。通过让构造函数设置main方法将对其做出反应的标志,我将完成您要做的事情。像这样:
import javax.swing.JDialog;
import javax.swing.JLabel;
public class MyDialog extends JDialog {
private boolean showMe;
public MyDialog(String name){
JLabel welcomeLable = new JLabel("Hi welcome");
add(welcomeLable);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setSize(100, 100);
showMe = name.equals("pass");
}
public boolean getShowMe(){
return showMe;
}
public static void main(String[] d){
MyDialog dialog = new MyDialog("fail");
dialog.setModal(true);
if (dialog.getShowMe()){
dialog.pack();
dialog.setVisible(true);
}else{
dialog.dispose();
}
}
}