package org.chartsy.chatsy.chat.component; import org.chartsy.chatsy.chat.ChatsyManager; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.Icon; import javax.swing.JDialog; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; public final class InputDialog implements PropertyChangeListener { private JTextArea textArea; private JOptionPane optionPane; private JDialog dialog; private String stringValue; private int width = 400; private int height = 250; public InputDialog() { } public String getInput(String title, String description, Icon icon, int width, int height) { this.width = width; this.height = height; return getInput(title, description, icon, ChatsyManager.getMainWindow()); } public String getInput(String title, String description, Icon icon, Component parent) { textArea = new JTextArea(); textArea.setLineWrap(true); TitlePanel titlePanel = new TitlePanel(title, description, icon, true); final JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.add(titlePanel, BorderLayout.NORTH); final Object[] options = {"Ok", "Cancel"}; optionPane = new JOptionPane( new JScrollPane(textArea), JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, ChatsyManager.getApplicationImage(), options, options[0]); mainPanel.add(optionPane, BorderLayout.CENTER); JOptionPane p = new JOptionPane(); dialog = p.createDialog(parent, title); dialog.setModal(true); dialog.pack(); dialog.setSize(width, height); dialog.setContentPane(mainPanel); dialog.setLocationRelativeTo(parent); optionPane.addPropertyChangeListener(this); textArea.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyChar() == KeyEvent.VK_TAB) optionPane.requestFocus(); else if (e.getKeyChar() == KeyEvent.VK_ESCAPE) dialog.dispose(); } }); textArea.requestFocus(); textArea.setWrapStyleWord(true); dialog.setVisible(true); return stringValue; } public Action nextFocusAction = new AbstractAction("Move Focus Forwards") { public void actionPerformed(ActionEvent evt) { ((Component)evt.getSource()).transferFocus(); } }; public Action prevFocusAction = new AbstractAction("Move Focus Backwards") { public void actionPerformed(ActionEvent evt) { ((Component)evt.getSource()).transferFocusBackward(); } }; public void propertyChange(PropertyChangeEvent e) { String value = (String)optionPane.getValue(); if ("Cancel".equals(value)) { stringValue = null; dialog.setVisible(false); } else if ("Ok".equals(value)) { stringValue = textArea.getText(); if (stringValue.trim().length() == 0) stringValue = null; else stringValue = stringValue.trim(); dialog.setVisible(false); } } }