如何从按钮关闭jdialog?

时间:2012-11-08 12:26:30

标签: 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");

        }
    }

非常感谢任何帮助

2 个答案:

答案 0 :(得分:6)

  

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

是的,您可以在运行时更改setModalModalityTypes,但对于此表单中的代码不会让我任何意外

  

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

在这种情况下,如果您要致电setVisibledispose()

,则无关紧要
  • 只创建JDialog一次,

  • 将其创建为本地变量

  • 更改myDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);,然后更改button toolbarX)以隐藏JDialog

  • 然后,如果需要,您也可以actionPerformedmyDialog.setVisible(true)ModalityType来电话,setVisible应该包含在invokeLater()中,而不是创建新的实例(new Dialogz(this, true);

  • 放置在JButton中的
  • JDialog将仅被调用myDialog.setVisible(false)

  • example corresponding with your logics

答案 1 :(得分:1)

有人告诉我..

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();
        }
    }