Java 如何从按钮关闭jdialog?
我有一个Jframe(美因茨) 它有一个按钮(showDialog) 当用户单击按钮时 jdialog(Dialogz)将显示 那个jdialog有一个按钮Java 如何从按钮关闭jdialog?,java,swing,modal-dialog,jdialog,Java,Swing,Modal Dialog,Jdialog,我有一个Jframe(美因茨) 它有一个按钮(showDialog) 当用户单击按钮时 jdialog(Dialogz)将显示 那个jdialog有一个按钮 如何从该按钮(在jdialog内)关闭jdialog 在创建对话框的实例后,是否可以更改对话框的模式 我需要阻止jdialog的所有者 在这里我试着 import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionLis
- 如何从该按钮(在jdialog内)关闭jdialog
- 在创建对话框的实例后,是否可以更改对话框的模式
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
public class Mainz extends JFrame implements ActionListener{
JButton showDialog = new JButton("show dialog");
public Mainz() {
setLayout(new FlowLayout());
showDialog.addActionListener(this);
add(showDialog);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
new Dialogz(this, true);
}
public static void main(String[]args){
new Mainz();
}
}
class Dialogz extends JDialog{
JButton close = new JButton("close");
public Dialogz(JFrame owner,boolean modal) {
super(owner, modal);
System.out.println(this.getModalityType());
add(close);
setLocationRelativeTo(owner);
setVisible(true);
close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae){
closez();
}
});
}
void closez(){
setModal(false);
this.dispose();
System.out.println("Method Done");
}
}
非常感谢你的帮助
在创建对话框的实例后,是否可以更改对话框的模式
是的,您可以在运行时更改setModal
或modalitypes
,但是对于这种形式的代码我没有任何意义
如何从该按钮(在jdialog内)关闭jdialog
在这种情况下,是否调用setVisible
或dispose()
- 只创建一次
JDialog
- 将其创建为局部变量
- 更改
,然后在myDialog.setDefaultCloseOperation(JDialog.HIDE\u ON\u CLOSE)
工具栏中的
按钮
(使用
)也隐藏X
JDialog
- 然后您可以仅从
调用actionPerformed
和myDialog.setVisible(true)
如果需要,setVisible应该包装在ModalityType
中,而不是创建新实例(invokeLater()
)newdialogz(this,true);
- 放置在
中的JDialog
将仅调用JButton
myDialog.setVisible(false)
有人告诉我
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
public class Mainz extends JFrame implements ActionListener{
JButton showDialog = new JButton("show dialog");
public Mainz() {
setLayout(new FlowLayout());
showDialog.addActionListener(this);
add(showDialog);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
new Dialogz(this, false);
setEnabled(false);
}
public static void main(String[]args){
new Mainz();
}
}
class Dialogz extends JDialog{
JButton close = new JButton("close");
public Dialogz(JFrame owner,boolean modal) {
super(owner, modal);
add(close);
setLocationRelativeTo(owner);
setVisible(true);
close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae){
closez();
}
});
}
void closez(){
System.out.println("before ="+getModalityType());
setModal(true);
System.out.println("after ="+getModalityType());
getOwner().setEnabled(true);
Dialogz.this.dispose();
}
}
谢谢你。。我的代码只是为了让它看起来简单。。(但我仍然觉得很难)我的对话框稍后将与数据库相关(可以更改对话框中的值)。。因此,我需要再次处理并创建新对话框。。你能给我关闭该对话框的代码并更改方法closez中的模式(从我的post代码)吗?再次创建这个JDialog一次,放置数据库更新所需的JComponents,将数据放入JDialog中的JComponents,显示对话框,让模式检查setModal(true/false)或setModalitypesthankz的类似方法。但我不能。老实说,我的主框架有很多按钮。。其中一个将显示另一个jdialog。确定我的问题jdialog(包含关闭问题的对话框)的ui。。我已经写了我的代码。(如此之多)如果我只尝试创建一次jdialog,我认为它会在我的情况下创建一个bug。。不过,也许我能处理这个错误。。把和数据库有关系的组件和读取、编码和重新思考放在一起。所以我不能。。也许可以,但需要更长的时间。我是否可以在每个用户单击按钮时创建一个新对话框?非常感谢您的回复
,但我不能。老实说,我的主框架有很多按钮(代码):-)呵呵,没问题,把所有这些JPanels
放到CardLayout
并在视图之间切换(调用JDialog.pack()
如果你想将JDialog
更改为JPanels维度,不要忘记close()中的所有结果集
和语句
最后阻塞
,否则这些对象
也会留在JVM内存中,永远不会被GC'ed
我不能在我的情况下使用卡片布局t-t。。。另一方面,稍后我计划学习包含数据库值的3d。。然后把它放在我的问题对话框中。。管理对话框a中的值,对话框b中的视图。。因此,每次用户单击按钮时,我都需要创建一个新的jdialog~_~