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 }