2013-07-22 4 views
3

Я использовалJava возвращения из ShowOptionDialog от внутренней JPanel

 
JOptionPane.showOptionDialog(null, 
     new MyPanel(), 
     "Import", 
     JOptionPane.DEFAULT_OPTION, 
     JOptionPane.PLAIN_MESSAGE, 
     null, new Object[]{}, null); 

, потому что я не хочу, кнопки по умолчанию, предоставленные OptionDialog и я создал мои кнопки внутри MyPanel extends JPanel Так что моя проблема в том, как теперь я могу закройте этот OptionDialog изнутри MyPanel, выпущенный ActionEvent? Меня не волнует возвращаемое значение, если этот диалог исчезнет. И я понимаю, что это может быть не лучший дизайн, но я много работал над этим много раз, поэтому я предпочел бы исправление, которое предполагает как можно меньше изменений в структуре. Благодаря!

+0

Просто хочу уточнить, вам не нравятся кнопки, потому что o f L & F? Потому что я предполагаю, что вы знаете, что мы можем передать собственный текст кнопки? – user2507946

+0

@ user2507946 Да, я знаю. По умолчанию кнопки будут закрывать диалог при нажатии. Я не хочу этого. – YankeeWhiskey

ответ

3

Преобразовать JOptionPane к JDialog, используя JOptionPane.createDialog(String title):

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://i.imgur.com/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(); 
      } 
     }); 
    } 
} 
+0

@YankeeWhisky: Посмотрите, что я изменил некоторые параметры, из вашей 'JOptionPane' здесь и там, хотя они все еще присутствуют. –

Смежные вопросы