Java从内部JPanel返回ShowOptionDialog
我用了
JOptionPane.showOptionDialog(NULL, 新的MyPanel(), “import”, JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null,new Object [] {},null);
因为我不想要OptionDialog提供的默认按钮,我在MyPanel中创建了我的按钮MyPanel extends JPanel
所以现在我的问题是如何从ActionEvent
触发的MyPanel
关闭那个OptionDialog? 只要该对话框消失,我不关心返回值。 我意识到这可能不是最好的设计,但我已经做了很多次这样的事情,所以我更喜欢一个修复,尽可能少地改变结构。 谢谢!
使用JOptionPane.createDialog(String title)将JOptionPane
转换为JDialog
:
JOptionPane optionPane = new JOptionPane(getPanel(), JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[]{}, null); dialog = optionPane.createDialog("import"); dialog.setVisible(true);
现在在actionPerformed(ActionEvent ae)
方法中,只需编写:
dialog.dispose();
看看这个工作示例:
import java.awt.*; import java.awt.event.*; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import javax.swing.*; import javax.imageio.ImageIO; public class JOptionPaneExample { private JDialog dialog; private void displayGUI() { JOptionPane optionPane = new JOptionPane(getPanel(), JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[]{}, null); dialog = optionPane.createDialog("import"); dialog.setVisible(true); } private JPanel getPanel() { JPanel panel = new JPanel(); JLabel label = new JLabel("Java Technology Dive Log"); ImageIcon image = null; try { image = new ImageIcon(ImageIO.read( new URL("http://sofzh.miximages.com/java/6mbHZRU.png"))); } catch(MalformedURLException mue) { mue.printStackTrace(); } catch(IOException ioe) { ioe.printStackTrace(); } label.setIcon(image); JButton button = new JButton("EXIT"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { dialog.dispose(); } }); panel.add(label); panel.add(button); return panel; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new JOptionPaneExample().displayGUI(); } }); } }