/** * Copyright (c) 2009 - 2010 AppWork UG(haftungsbeschränkt) <e-mail@appwork.org> * * This file is part of org.appwork.utils.swing.dialog * * This software is licensed under the Artistic License 2.0, * see the LICENSE file or http://www.opensource.org/licenses/artistic-license-2.0.php * for details */ package org.appwork.utils.swing.dialog; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JTextPane; import javax.swing.text.JTextComponent; import net.miginfocom.swing.MigLayout; import org.appwork.utils.BinaryLogic; import org.appwork.utils.logging.Log; public class InputDialog extends AbstractDialog<String> implements KeyListener, MouseListener { private static final long serialVersionUID = 9206575398715006581L; protected String defaultMessage; protected String message; private JTextPane messageArea; private JTextComponent input; public InputDialog(final int flag, final String title, final String message, final String defaultMessage, final ImageIcon icon, final String okOption, final String cancelOption) { super(flag, title, icon, okOption, cancelOption); Log.L.fine("Dialog [" + okOption + "][" + cancelOption + "]\r\nflag: " + Integer.toBinaryString(flag) + "\r\ntitle: " + title + "\r\nmsg: \r\n" + message + "\r\ndef: \r\n" + defaultMessage); this.defaultMessage = defaultMessage; this.message = message; } /* * (non-Javadoc) * * @see org.appwork.utils.swing.dialog.AbstractDialog#getRetValue() */ @Override protected String createReturnValue() { return getReturnID(); } public String getDefaultMessage() { return defaultMessage; } public String getMessage() { return message; } public String getReturnID() { if ((getReturnmask() & (Dialog.RETURN_OK | Dialog.RETURN_TIMEOUT)) == 0) { return null; } if (input == null || input.getText() == null) { return null; } if (input instanceof JPasswordField) { return new String(((JPasswordField) input).getPassword()); } return input.getText(); } public void keyPressed(final KeyEvent e) { cancel(); } public void keyReleased(final KeyEvent e) { } public void keyTyped(final KeyEvent e) { } @Override public JComponent layoutDialogContent() { final JPanel contentpane = new JPanel(new MigLayout("ins 0,wrap 1", "[fill,grow]")); messageArea = new JTextPane(); messageArea.setBorder(null); messageArea.setBackground(null); messageArea.setOpaque(false); messageArea.setText(message); messageArea.setEditable(false); messageArea.putClientProperty("Synthetica.opaque", Boolean.FALSE); if (BinaryLogic.containsAll(flagMask, Dialog.STYLE_HTML)) { messageArea.setContentType("text/html"); } contentpane.add(messageArea); if (BinaryLogic.containsAll(flagMask, Dialog.STYLE_LARGE)) { input = new JTextPane(); input.setText(defaultMessage); input.addKeyListener(this); input.addMouseListener(this); contentpane.add(new JScrollPane(input), "height 20:60:n,pushy,growy,w 450"); } else { input = BinaryLogic.containsAll(flagMask, Dialog.STYLE_PASSWORD) ? new JPasswordField() : new JTextField(); input.setBorder(BorderFactory.createEtchedBorder()); input.setText(defaultMessage); input.addKeyListener(this); input.addMouseListener(this); contentpane.add(input, "pushy,growy,w 450"); } return contentpane; } public void mouseClicked(final MouseEvent e) { cancel(); } public void mouseEntered(final MouseEvent e) { } public void mouseExited(final MouseEvent e) { } public void mousePressed(final MouseEvent e) { } public void mouseReleased(final MouseEvent e) { } @Override protected void packed() { input.selectAll(); requestFocus(); input.requestFocusInWindow(); } public void setDefaultMessage(final String defaultMessage) { this.defaultMessage = defaultMessage; if (input != null) { input.setText(defaultMessage); } } public void setMessage(final String message) { this.message = message; } }