1 21 22 package org.armedbear.j; 23 24 import java.awt.BorderLayout ; 25 import java.awt.Dimension ; 26 import java.awt.Font ; 27 import java.awt.Graphics ; 28 import java.awt.event.FocusEvent ; 29 import java.awt.event.FocusListener ; 30 import java.awt.event.KeyEvent ; 31 import java.awt.event.KeyListener ; 32 import javax.swing.BoxLayout ; 33 import javax.swing.JDialog ; 34 import javax.swing.JPanel ; 35 import javax.swing.JPasswordField ; 36 import javax.swing.border.EmptyBorder ; 37 38 public final class PasswordDialog extends JDialog implements FocusListener , 39 KeyListener 40 { 41 private final Editor editor; 42 private final PasswordField textField; 43 private String input; 44 45 private PasswordDialog(Editor editor, String prompt, String title) 46 { 47 super(editor.getFrame(), title, true); 48 this.editor = editor; 49 input = null; 50 JPanel panel = new JPanel (); 51 panel.setLayout(new BoxLayout (panel, BoxLayout.Y_AXIS)); 52 panel.setBorder(new EmptyBorder (5, 5, 5, 5)); 53 Label label = new Label(prompt); 54 panel.add(label); 55 textField = new PasswordField (20); 56 textField.setAlignmentX(LEFT_ALIGNMENT); 57 textField.addKeyListener(this); 58 panel.add(textField); 59 getContentPane().add(panel, BorderLayout.CENTER); 60 pack(); 61 addFocusListener(this); 62 } 63 64 public void keyPressed(KeyEvent e) 65 { 66 switch (e.getKeyCode()) { 67 case KeyEvent.VK_ENTER: 68 input = textField.getText(); 69 dispose(); 70 return; 71 case KeyEvent.VK_ESCAPE: 72 dispose(); 73 return; 74 } 75 } 76 77 public void keyReleased(KeyEvent e) {} 78 79 public void keyTyped(KeyEvent e) {} 80 81 public static String showPasswordDialog(Editor editor, String prompt, 82 String title) 83 { 84 PasswordDialog d = new PasswordDialog(editor, prompt, title); 85 editor.centerDialog(d); 86 d.show(); 87 return d.input; 88 } 89 90 public void dispose() 91 { 92 super.dispose(); 93 editor.restoreFocus(); 94 } 95 96 public void focusGained(FocusEvent e) 97 { 98 textField.requestFocus(); 99 } 100 101 public void focusLost(FocusEvent e) {} 102 103 private static class PasswordField extends JPasswordField 104 { 105 public PasswordField(int columns) 106 { 107 super(columns); 108 final Preferences preferences = Editor.preferences(); 109 final String fontName = 110 preferences.getStringProperty(Property.TEXT_FIELD_FONT_NAME); 111 if (fontName != null) { 112 int fontSize = 113 preferences.getIntegerProperty(Property.TEXT_FIELD_FONT_SIZE); 114 if (fontSize == 0) 115 fontSize = 116 preferences.getIntegerProperty(Property.DIALOG_FONT_SIZE); 117 setFont(new Font (fontName, Font.PLAIN, fontSize)); 118 } 119 } 120 121 public Dimension getPreferredSize() { 122 Dimension size = super.getPreferredSize(); 123 size.width = getColumns() * 11; 124 return size; 125 } 126 127 public void paintComponent(Graphics g) 128 { 129 Display.setRenderingHints(g); 130 super.paintComponent(g); 131 } 132 } 133 } 134 | Popular Tags |