日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java top.dialog控件,java – 如何只为他的父级创建JDialog onTop?

發(fā)布時(shí)間:2023/12/9 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java top.dialog控件,java – 如何只为他的父级创建JDialog onTop? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

可以說(shuō),我們有幾個(gè)JFrame窗口同時(shí)可見(jiàn),并且每個(gè)窗口都出現(xiàn)JDialog.當(dāng)我們的窗口處于級(jí)聯(lián)模式和對(duì)話框setAlwaysOnTop為真時(shí),所有對(duì)話框?qū)⒃谧詈笠粋€(gè)窗口中可見(jiàn).

我只想將Dialog組件與其所有者關(guān)聯(lián)起來(lái),這樣當(dāng)你在Frames之間切換時(shí),你只會(huì)在頂部獲得一個(gè)對(duì)話框,并且在單擊一個(gè)框架時(shí)不會(huì)丟失該對(duì)話框.

對(duì)話框有這樣的構(gòu)造函數(shù):

setAlwaysOnTop(true);

setModal(false);

提前致謝!

解決方法:

How to make JDialog onTop only for his parent?

> setParent in the constructor properly

>必須使用setModalityType f.e. ModalityType.DOCUMENT_MODAL ModalityType.APPLICATION_MODAL而不是setModal

> setModal對(duì)初始化/是此JDialog的父級(jí)的容器有效

>不要使用多個(gè)JFrame,而是使用JDialog,將此容器重新用于其他操作

例如

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class SuperConstructor extends JFrame {

private static final long serialVersionUID = 1L;

public SuperConstructor() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setPreferredSize(new Dimension(300, 300));

setTitle("Super constructor");

Container cp = getContentPane();

JButton b = new JButton("Show dialog");

b.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent evt) {

FirstDialog firstDialog = new FirstDialog(SuperConstructor.this);

}

});

cp.add(b, BorderLayout.SOUTH);

JButton bClose = new JButton("Close");

bClose.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent evt) {

System.exit(0);

}

});

add(bClose, BorderLayout.NORTH);

pack();

setVisible(true);

}

public static void main(String args[]) {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

SuperConstructor superConstructor = new SuperConstructor();

}

});

}

private class FirstDialog extends JDialog {

private static final long serialVersionUID = 1L;

FirstDialog(final Frame parent) {

super(parent, "FirstDialog");

setPreferredSize(new Dimension(200, 200));

setLocationRelativeTo(parent);

setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

setModalityType(Dialog.ModalityType.APPLICATION_MODAL);

JButton bNext = new JButton("Show next dialog");

bNext.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent evt) {

SecondDialog secondDialog = new SecondDialog(parent, false);

}

});

add(bNext, BorderLayout.NORTH);

JButton bClose = new JButton("Close");

bClose.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent evt) {

setVisible(false);

}

});

add(bClose, BorderLayout.SOUTH);

pack();

setVisible(true);

}

}

private int i;

private class SecondDialog extends JDialog {

private static final long serialVersionUID = 1L;

SecondDialog(final Frame parent, boolean modal) {

//super(parent); // Makes this dialog unfocusable as long as FirstDialog is visible

setPreferredSize(new Dimension(200, 200));

setLocation(300, 50);

setModal(modal);

setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

setTitle("SecondDialog " + (i++));

setModalityType(Dialog.ModalityType.APPLICATION_MODAL);

JButton bClose = new JButton("Close");

bClose.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent evt) {

setVisible(false);

}

});

add(bClose, BorderLayout.SOUTH);

pack();

setVisible(true);

}

}

}

標(biāo)簽:java,modal-dialog,swing,jdialog

來(lái)源: https://codeday.me/bug/20190529/1179407.html

總結(jié)

以上是生活随笔為你收集整理的java top.dialog控件,java – 如何只为他的父级创建JDialog onTop?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。