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();
}
});
}
}
精彩评论