2010-10-29 10 views
2

此外,当我点击右上角的'X'按钮时,对话框的行为就好像我点击了OK(在消息上)或YES(在问题上),当用户点击X时,我想要DO_Nothing。如何驯服JOptionPane对话框上的X?

在下面的代码,当我在对话框上的X点击,它弹出的“吃!”。显然,X充当“YES”选项,它不应该。

int c =JOptionPane.showConfirmDialog(null, "Are you hungry?", "1", JOptionPane.YES_NO_OPTION); 
if(c==JOptionPane.YES_OPTION){ 
JOptionPane.showMessageDialog(null, "eat!", "Order",JOptionPane.PLAIN_MESSAGE); 
} 
else {JOptionPane.showMessageDialog(null, "ok cool", "Order",JOptionPane.PLAIN_MESSAGE);} 
+0

什么是你的Java版本?我无法重现OpenJDK 1.6.0_20的问题。接受的答案是使用JOptionPane的一个非常糟糕的方式。 – 2010-10-30 06:28:01

回答

3

更改为显示如何忽略每个OP的对话框上的取消按钮澄清问题:

JOptionPane pane = new JOptionPane("Are you hungry?", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION); 

JDialog dialog = pane.createDialog("Title"); 
dialog.addWindowListener(new WindowAdapter() { 
    public void windowClosing(WindowEvent evt) { 
    } 
}); 
dialog.setContentPane(pane); 
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
dialog.pack(); 

dialog.setVisible(true); 
int c = ((Integer)pane.getValue()).intValue(); 

if(c == JOptionPane.YES_OPTION) { 
    JOptionPane.showMessageDialog(null, "eat!", "Order",JOptionPane.PLAIN_MESSAGE); 
} 
else if (c == JOptionPane.NO_OPTION) { 
    JOptionPane.showMessageDialog(null, "ok cool", "Order",JOptionPane.PLAIN_MESSAGE); 
} 
+0

有没有办法,即使我按X.没有什么会发生..像差点,特定actionListener。 – razshan 2010-10-29 17:21:39

+0

在代码开始的一些代码行中实现了这个“如果有人在对话框上按下X,就会出现不会发生的情况,我希望我的用户完成该程序!” – razshan 2010-10-29 17:22:16

+0

感谢它的工作,我想知道,因为标题菜单现在几乎没用,有没有办法把它关掉。 (隐藏X,标题菜单) – razshan 2010-10-29 20:44:56

1

你不能通过通常的JOptionPane.show *方法做你想做的事。

你必须做这样的事情:

public static int showConfirmDialog(Component parentComponent, 
    Object message, String title, int optionType) 
{ 
    JOptionPane pane = new JOptionPane(message, JOptionPane.QUESTION_MESSAGE, 
     optionType); 
    final JDialog dialog = pane.createDialog(parentComponent, title); 
    dialog.setVisible(false) ; 
    dialog.setLocationRelativeTo(parentComponent); 
    dialog.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); 
    dialog.setModal(true); 
    dialog.setVisible(true) ; 
    dialog.dispose(); 
    Object o = pane.getValue(); 
    if (o instanceof Integer) { 
     return (Integer)o; 
    } 
    return JOptionPane.CLOSED_OPTION; 
} 

,实际上禁用关闭按钮是该行:

dialog.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); 
相关问题