The
ANOTHER EXAMPLE OF JFORMATTEDTEXTFIELD
THE OUTPUT IS
JFormattedTextField
allows us to create a text field that can accept a formatted input. In this example we create two formatted text fields that accept a valid phone number and date.import javax.swing.*;
import javax.swing.text.MaskFormatter;
import javax.swing.text.DateFormatter;
import java.awt.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
public class FormattedTextFieldExample extends JFrame {
public FormattedTextFieldExample() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(200, 200));
getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));
MaskFormatter mask = null;
try {
//
// Create a MaskFormatter for accepting phone number, the # symbol accept
// only a number. We can also set the empty value with a place holder
// character.
//
mask = new MaskFormatter("(###) ###-####");
mask.setPlaceholderCharacter('_');
} catch (ParseException e) {
e.printStackTrace();
}
//
// Create a formatted text field that accept a valid phone number.
//
JFormattedTextField phoneField = new JFormattedTextField(mask);
phoneField.setPreferredSize(new Dimension(100, 20));
//
// Here we create a formatted text field that accept a date value. We
// create an instance of SimpleDateFormat and use it to create a
// DateFormatter instance which will be passed to the JFormattedTextField.
//
DateFormat format = new SimpleDateFormat("dd-MMMM-yyyy");
DateFormatter df = new DateFormatter(format);
JFormattedTextField dateField = new JFormattedTextField(df);
dateField.setPreferredSize(new Dimension(100, 20));
dateField.setValue(new Date());
getContentPane().add(phoneField);
getContentPane().add(dateField);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new FormattedTextFieldExample().setVisible(true);
}
});
}
}
Here are some other characters that can be used in the
MaskFormatter
class.Char | Description |
---|---|
# | For number |
? | For letter |
A | For number or letter |
* | For anything |
L | For letter, it will be converted to the equivalent lower case |
U | For letter, it will be converted to the equivalent upper case |
H | For hexadecimal value |
‘ | To escape another mask character |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
| import javax.swing.text.*; import java.awt.event.*; import javax.swing.*; import java.text.*; import java.awt.*; import java.util.*; public class Main extends JFrame { public Main() throws Exception { addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit( 1 ); } }); final JFormattedDateTextField formattedTf = new JFormattedDateTextField(); formattedTf.setValue( new Date()); final JTextField normalTf = new JTextField( 25 ); JButton button = new JButton( "Get value" ); button.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ae) { normalTf.setText( "" +formattedTf.getValue()); } }); getContentPane().setLayout( new FlowLayout(FlowLayout. LEFT )); getContentPane().add(formattedTf); getContentPane().add(button); getContentPane().add(normalTf); formattedTf.setPreferredSize(normalTf.getPreferredSize()); } public static void main(String args[]) throws Exception { Main main = new Main(); main.setSize( 300 , 150 ); main.setVisible( true ); } } class JFormattedDateTextField extends JFormattedTextField { Format format = new SimpleDateFormat( "MM/dd/yyyy" ); public JFormattedDateTextField() { super (); MaskFormatter maskFormatter = null ; try { maskFormatter = new MaskFormatter( "##/##/####" ); } catch (ParseException e) { e.printStackTrace(); } maskFormatter.setPlaceholderCharacter( '_' ); setFormatterFactory( new DefaultFormatterFactory(maskFormatter)); this .addFocusListener( new FocusAdapter() { public void focusGained(FocusEvent e) { if (getFocusLostBehavior() == JFormattedTextField. PERSIST ) setFocusLostBehavior(JFormattedTextField.COMMIT_OR_REVERT); } public void focusLost(FocusEvent e) { try { Date date = (Date) format.parseObject(getText()); setValue(format.format(date)); } catch (ParseException pe) { setFocusLostBehavior(JFormattedTextField. PERSIST ); setText( "" ); setValue( null ); } } }); } public void setValue(Date date) { super .setValue(toString(date)); } private Date toDate(String sDate) { Date date = null ; if (sDate == null ) return null ; try { date = (Date) format.parseObject(sDate); } catch (ParseException pe) { // ignore } return date; } private String toString(Date date) { try { return format.format(date); } catch (Exception e) { return "" ; } } } |
THE OUTPUT IS
No comments:
Post a Comment