java swing joption_java – 如何在所有窗口的顶部显示JOptionPa...

有两个可能的问题

>从EDT调出JOptionPane,然后只有工具栏(来自Native OS的标题在屏幕上可见,RootPane不可见)在屏幕上可见

>在那里你可以测试JOptionPanes的功能,其中JOptionPane.showInternalMessageDialog()在所有情况下都会出现麻烦,即存在另一个带有setModal(true)的JDialog,真正的原因我不知道,同样应该是ModalityTypes

>无法同时在屏幕上显示两个JOptionPanes

import java.awt.event.MouseEvent;

import javax.swing.JFrame;

import javax.swing.JButton;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.Toolkit;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.awt.event.MouseAdapter;

import javax.swing.JDialog;

import javax.swing.JOptionPane;

import javax.swing.JRootPane;

import javax.swing.Timer;

//https://stackoverflow.com/questions/8670297/make-java-swing-modal-dialog-behave-like-mac-osx-dialogs

public class ModalDialogDemoFrame extends JFrame {

private static final long serialVersionUID = 1L;

private ModalDialogDemoFrame modalDialogDemo;

public ModalDialogDemoFrame() {

modalDialogDemo = this;

setBounds(100, 100, 400, 400);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JButton buttonDialog = new JButton("Open Dialog");

buttonDialog.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

// Create a Modal Dialog with this Frame as Parent.

ModalDialog modalDialog = new ModalDialog(modalDialogDemo, true);

modalDialog.setVisible(true);

}

});

getContentPane().add(buttonDialog, BorderLayout.CENTER);

}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

ModalDialogDemoFrame window = new ModalDialogDemoFrame();

window.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

}

//https://stackoverflow.com/questions/4577424/distinguish-between-a-single-click-and-a-double-click-in-java/4577475#4577475

class ClickListener extends MouseAdapter implements ActionListener {

private final static int clickInterval = (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");

private MouseEvent lastEvent;

private Timer timer;

public ClickListener() {

this(clickInterval);

}

public ClickListener(int delay) {

timer = new Timer(delay, this);

}

@Override

public void mouseClicked(MouseEvent e) {

if (e.getClickCount() > 2) {

return;

}

lastEvent = e;

if (timer.isRunning()) {

timer.stop();

doubleClick(lastEvent);

} else {

timer.restart();

}

}

@Override

public void actionPerformed(ActionEvent e) {

timer.stop();

singleClick(lastEvent);

}

public void singleClick(MouseEvent e) {

}

public void doubleClick(MouseEvent e) {

}

}

class ModalDialog extends JDialog {

private static final long serialVersionUID = 1L;

public ModalDialog(JFrame parent, boolean modal) {

Dimension dimensionParentFrame = parent.getSize();

setSize(new Dimension((parent == null) ? 300 : dimensionParentFrame.width / 2, 75));

Dimension dimensionDialog = getSize();

int x = parent.getX() + ((dimensionParentFrame.width - dimensionDialog.width) / 2);

setLocation(x, parent.getY() + parent.getInsets().top);

//setUndecorated(true);

setModal(modal);

//setUndecorated(true);

//getRootPane().setWindowDecorationStyle(JRootPane.ERROR_DIALOG);

setModalityType(ModalityType.APPLICATION_MODAL);

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

final JButton buttonClose = new JButton("Close");

buttonClose.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

//ok

/*JOptionPane.showMessageDialog(buttonClose,

"Eggs are not supposed to be green.",

"Inane warning",

JOptionPane.WARNING_MESSAGE);*/

//uncomment for un_handled GUI, JOptionPane is behing JFrame I think....

/*JOptionPane.showInternalMessageDialog(buttonClose,

"Eggs are not supposed to be green.",

"Inane warning",

JOptionPane.WARNING_MESSAGE);*/

//ok

/*JOptionPane.showConfirmDialog(buttonClose,

"Eggs are not supposed to be green.",

"Inane warning",

JOptionPane.WARNING_MESSAGE);*/

//ok

/*JOptionPane.showMessageDialog(null,

"Eggs are not supposed to be green.",

"Inane warning",

JOptionPane.WARNING_MESSAGE);*/

//uncomment for un_handled GUI

//Exception occurred during event dispatching:

//java.lang.RuntimeException: JOptionPane: parentComponent does not have a valid parent

/*JOptionPane.showInternalMessageDialog(null,

"Eggs are not supposed to be green.",

"Inane warning",

JOptionPane.WARNING_MESSAGE);*/

//ok

JOptionPane.showConfirmDialog(null,

"Eggs are not supposed to be green.",

"Inane warning",

JOptionPane.WARNING_MESSAGE);

dispose();

}

});

add(buttonClose, BorderLayout.CENTER); // comment for listening

addMouseListener(new ClickListener() {

@Override

public void singleClick(MouseEvent e) {

System.out.println("single");

}

@Override

public void doubleClick(MouseEvent e) {

System.out.println("double");

}

});

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值