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

ダイアログのインスタンスを作成した後でダイアログのモーダルを変更できますか?

setModalはい、実行時に変更することもできますがModalityTypes、この形式のコードでは意味がありません

そのボタンからjdialogを閉じる方法(jdialog内)?

この場合、あなたが電話するかどうかは問題ではありませsetVisibledispose()


  • JDialog一度だけ作成し、

  • それをローカル変数として作成します

  • を変更し、myDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);( with ) で非表示にしますbuttontoolbarXJDialog

  • その後、必要に応じて、新しいインスタンス ( )を作成する代わり に、 setVisible を でラップする必要がありますactionPerformedmyDialog.setVisible(true)ModalityTypeinvokeLater()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 に答える