3

我有一个 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");

        }
    }

非常感谢任何帮助

4

2 回答 2

6

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

是的,您可以更改setModalModalityTypes在运行时进行更改,但是对于这种形式的代码并没有任何意义

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

在这种情况下,您是否打电话setVisibledispose()


  • 只创造JDialog一次,

  • 将其创建为局部变量

  • change myDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);,然后buttontoolbar(with ) 中也X隐藏JDialog

  • 那么你可以actionPerformed只调用 from myDialog.setVisible(true)ModalityType 如果需要,也可以调用 setVisible invokeLater(),而不是创建一个新实例 ( new Dialogz(this, true);)

  • JButton放置在JDialog只会被调用myDialog.setVisible(false)

  • 与您的逻辑相对应的示例

于 2012-11-08T12:36:14.550 回答
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();
        }
    }
于 2012-11-08T15:17:40.187 回答