如何从按钮关闭jdialog?

mop*_*opr 3 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.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");

        }
    }
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助

mKo*_*bel 6

我可以在创建它的实例后更改对话模式吗?

是的,你可以改变setModalModalityTypes运行时,但对于这种形式的代码不会让我任何意义

如何从该按钮关闭jdialog(在jdialog内)?

在这种情况下,无论你打电话setVisible还是dispose()


  • JDialog只创造一次,

  • 将其创建为局部变量

  • 变化myDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);,则buttontoolbar(与X)隐藏JDialog

  • 那么你可以从调用actionPerformed只有myDialog.setVisible(true)ModalityType 太如果需要的话,调用setVisible 768,16被包裹在invokeLater(),而不是创建一个新实例(new Dialogz(this, true);)

  • JButton放入JDialog将只会被调用myDialog.setVisible(false)

  • 与您的逻辑对应的示例