开发者

JOptionPane how to disable the X?

If the user clicks X on the top right, I don't want anything to happen. What is the code line to make this happen?

Object [] options1 = {"Go Ba开发者_开发问答ck", "Accept"};
 int a3 =JOptionPane.showOptionDialog(null,"Mean arterial pressure restored.\nReassess all vitals STAT.", "Title", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, options1, options1[0]);

 if(a3 == JOptionPane.CLOSED_OPTION)
{
 //what should i put here? if user X out, I want no response (DO_NOTHING_ON_CLOSE)
 }

 if(a3 == JOptionPane.YES_OPTION)
{ 
// doing something else
 }

if (a3 == JOptionPane.NO_OPTION)
{
//doing something else
}

I tried something like a3.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); but I get an error int cannot be dereferenced


Besides Chris option, take a look at the javadocs (http://download.oracle.com/javase/6/docs/api/javax/swing/JOptionPane.html) Direct use example.

You can achieve what you have tried with:

Object [] options1 = {"Go Back", "Accept"};
JOptionPane jop = new JOptionPane("Mean arterial pressure restored.\nReassess all vitals STAT.", JOptionPane.PLAIN_MESSAGE, JOptionPane.YES_NO_OPTION, null, options1, options1[0]);
JDialog dialog = jop.createDialog(null, "Title");
dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
// In real code, you should invoke this from AWT-EventQueue using invokeAndWait() or something
dialog.setVisible(true);
// and would cast in a safe manner
String a3 = (String) jop.getValue();
if (a3.equals("Accept")) {

} else if (a3.equals("Go Back")) {

}
// don't forget to dispose of the dialog
dialog.dispose();


What about this minimalistic approach:

Object [] options1 = {"Go Back", "Accept"};

do {
    a3 = JOptionPane.showOptionDialog(null,"Mean arterial pressure restored.\nReassess all vitals STAT.", "Title", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, options1, options1[0]);
} while(a3 == JOptionPane.CLOSED_OPTION);

if (a3 == JOptionPane.YES_OPTION) { 
    // doing something else
}

if (a3 == JOptionPane.NO_OPTION) {
    //doing something else
}


This code might do the trick (you can run the code to test it):

import javax.swing.*;  
import java.awt.*;  
import java.awt.event.*;  
class Testing  
{  
  public void buildGUI()  
  {  
    JFrame.setDefaultLookAndFeelDecorated(true);  
    JFrame f = new JFrame();  
    f.setResizable(false);  
    removeMinMaxClose(f);  
    JPanel p = new JPanel(new GridBagLayout());  
    JButton btn = new JButton("Exit");  
    p.add(btn,new GridBagConstraints());  
    f.getContentPane().add(p);  
    f.setSize(400,300);  
    f.setLocationRelativeTo(null);  
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    f.setVisible(true);  
    btn.addActionListener(new ActionListener(){  
      public void actionPerformed(ActionEvent ae){  
        System.exit(0);  
      }  
    });  
  }  
  public void removeMinMaxClose(Component comp)  
  {  
    if(comp instanceof AbstractButton)  
    {  
      comp.getParent().remove(comp);  
    }  
    if (comp instanceof Container)  
    {  
      Component[] comps = ((Container)comp).getComponents();  
      for(int x = 0, y = comps.length; x < y; x++)  
      {  
        removeMinMaxClose(comps[x]);  
      }  
    }  
  }  
  public static void main(String[] args)  
  {  
    SwingUtilities.invokeLater(new Runnable(){  
      public void run(){  
        new Testing().buildGUI();  
      }  
    });  
  }  
}  
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜