View Javadoc

1   package com.eviware.soapui.support.swing;
2   
3   import java.awt.BorderLayout;
4   import java.awt.FlowLayout;
5   import java.awt.Frame;
6   import java.awt.event.ActionEvent;
7   import java.awt.event.ActionListener;
8   
9   import javax.swing.JButton;
10  import javax.swing.JFrame;
11  import javax.swing.JLabel;
12  import javax.swing.JPanel;
13  import javax.swing.JTextField;
14  import javax.swing.SwingConstants;
15  import javax.swing.UIManager;
16  import javax.swing.border.EmptyBorder;
17  
18  import com.eviware.soapui.support.UISupport;
19  
20  /***
21   * Workaround because JOptionPane doesn't work well with ModalFrameUtil;
22   * if a JOptionPane is displayed, the modal frame is temporarily hidden.
23   * 
24   * @author lars
25   */
26  public class ModalFrameDialog
27  {
28     private JFrame frame;
29     private JTextField textField;
30     private JButton okButton;
31     private JButton cancelButton;
32     
33     private String retValue = null;
34     
35     public static String showInputDialog(
36           Frame parent, String question, String title, String initialValue)
37     {
38        ModalFrameDialog dialog = new ModalFrameDialog(question, title, initialValue);
39        dialog.show(parent);
40        return dialog.retValue;
41     }
42     
43     private ModalFrameDialog(String question, String title, String initialValue)
44     {
45        textField = new JTextField(initialValue, 20);
46        if(initialValue != null)
47        {
48           textField.setSelectionStart(0);
49           textField.setSelectionEnd(initialValue.length());
50        }
51        
52        JPanel buttonPanel = new JPanel(new FlowLayout());
53        okButton = new JButton("OK");
54        cancelButton = new JButton("Cancel");
55        buttonPanel.add(okButton);
56        buttonPanel.add(cancelButton);
57        
58        JLabel iconLabel = new JLabel(UIManager.getIcon("OptionPane.questionIcon"));
59        iconLabel.setVerticalAlignment(SwingConstants.TOP);
60        iconLabel.setBorder(new EmptyBorder(0, 0, 0, 10));
61        
62        JPanel outerPanel = new JPanel(new BorderLayout());
63        JPanel innerPanel = new JPanel(new BorderLayout());
64        outerPanel.add(iconLabel, BorderLayout.WEST);
65        outerPanel.add(innerPanel, BorderLayout.CENTER);
66        outerPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
67        
68        innerPanel.add(new JLabel(question), BorderLayout.NORTH);
69        innerPanel.add(textField, BorderLayout.CENTER);
70        innerPanel.add(buttonPanel, BorderLayout.SOUTH);
71        
72        frame = new JFrame(title);
73        frame.getContentPane().add(outerPanel);
74        frame.getRootPane().setDefaultButton(okButton);
75        frame.pack();
76  
77        okButton.addActionListener(new ActionListener()
78        {
79           public void actionPerformed(ActionEvent e)
80           {
81              close(textField.getText());
82           }
83        });
84        
85        cancelButton.addActionListener(new ActionListener()
86        {
87           public void actionPerformed(ActionEvent e)
88           {
89              close(null);
90           }
91        }); 
92     }
93  
94     private void show(Frame parent)
95     {
96        UISupport.centerDialog(frame, parent);
97        ModalFrameUtil.showAsModal(frame, parent);      
98     }
99     
100    private void close(String retValue)
101    {
102       this.retValue = retValue;
103       frame.setVisible(false);
104       frame.dispose();
105    }
106 }