- Swing 编程示例
- 示例 - 主页
- 示例 - 环境设置
- 示例 - 边框
- 示例 - 按钮
- 示例 - 复选框
- 示例 - 组合框
- 示例 - 颜色选取器
- 示例 - 对话框
- 示例 - 编辑器窗格
- 示例 - 文件选取器
- 示例 - 格式化文本字段
- 示例 - 框架
- 示例 - 列表
- 示例 - 布局
- 示例 - 菜单
- 示例 - 密码字段
- 示例 - 进度条
- 示例 - 滚动窗格
- 示例 - 滑块
- 示例 - 旋转器
- 示例 - 表格
- 示例 - 工具栏
- 示例 - 树
- Swing 实用资源
- Swing - 快速指南
- Swing - 实用资源
- Swing - 讨论
Swing 示例 - 使用 JFormattedTextField
以下示例展示如何创建和使用 JFormattedTextField 为基于 Swing 的应用程序中的文本字段指定各种格式。
我们使用以下 API。
JFormattedTextField − 创建格式化文本字段。
NumberFormat − 为 JFormattedTextField 提供不同类型的格式。
NumberFormat.getNumberInstance() − 获取数字格式。
NumberFormat.getPercentInstance() − 获取百分比格式。
NumberFormat.getCurrencyInstance() − 获取货币格式。
SimpleDateFormat − 获取日期格式。
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.LayoutManager; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.DateFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.JFormattedTextField; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class SwingTester implements PropertyChangeListener { private static JFormattedTextField principleTextField; private static JFormattedTextField rateTextField; private static JFormattedTextField yearsTextField; private static JFormattedTextField amountTextField; public static void main(String[] args) { SwingTester tester = new SwingTester(); createWindow(tester); } private static void createWindow(SwingTester tester) { JFrame frame = new JFrame("Swing Tester"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); createUI(frame, tester); frame.setSize(560, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); } private static void createUI(final JFrame frame, SwingTester tester) { JPanel panel = new JPanel(); LayoutManager layout = new GridLayout(6,2); panel.setLayout(layout); panel.setSize(300, 200); panel.setBorder(BorderFactory.createTitledBorder("Formats")); NumberFormat principleFormat = NumberFormat.getNumberInstance(); principleTextField = new JFormattedTextField(principleFormat); principleTextField.setName("Principle"); principleTextField.setColumns(10); JLabel principleLabel = new JLabel("Principle:"); principleLabel.setLabelFor(principleTextField); principleTextField.setValue(new Double(100000)); principleTextField.addPropertyChangeListener("value", tester); NumberFormat rateFormat = NumberFormat.getPercentInstance(); rateFormat.setMinimumFractionDigits(2); rateTextField = new JFormattedTextField(rateFormat); rateTextField.setName("Rate"); rateTextField.setColumns(10); JLabel rateLabel = new JLabel("Interest Rate:"); rateLabel.setLabelFor(rateTextField); rateTextField.setValue(new Double(0.1)); rateTextField.addPropertyChangeListener("value", tester); yearsTextField = new JFormattedTextField(); yearsTextField.setName("Years"); yearsTextField.setColumns(10); JLabel yearLabel = new JLabel("Year(s):"); yearLabel.setLabelFor(yearsTextField); yearsTextField.setValue(new Double(1)); yearsTextField.addPropertyChangeListener("value", tester); NumberFormat amountFormat = NumberFormat.getCurrencyInstance(); amountTextField = new JFormattedTextField(amountFormat); amountTextField.setName("Amount"); amountTextField.setColumns(10); amountTextField.setEditable(false); JLabel amountLabel = new JLabel("Amount:"); amountLabel.setLabelFor(amountTextField); amountTextField.setValue(new Double(110000)); DateFormat dateFormat = new SimpleDateFormat("dd MMM YYYY"); JFormattedTextField today = new JFormattedTextField(dateFormat); today.setName("Today"); today.setColumns(10); today.setEditable(false); JLabel todayLabel = new JLabel("Date:"); todayLabel.setLabelFor(today); today.setValue(new Date()); panel.add(principleLabel); panel.add(principleTextField); panel.add(rateLabel); panel.add(rateTextField); panel.add(yearLabel); panel.add(yearsTextField); panel.add(amountLabel); panel.add(amountTextField); panel.add(todayLabel); panel.add(today); JPanel mainPanel = new JPanel(); mainPanel.add(panel); frame.getContentPane().add(mainPanel, BorderLayout.CENTER); } @Override public void propertyChange(PropertyChangeEvent evt) { double amount, rate, years, principle; principle = ((Number)principleTextField.getValue()).doubleValue(); rate = ((Number)rateTextField.getValue()).doubleValue() * 100; years = ((Number)yearsTextField.getValue()).doubleValue(); amount = principle + principle * rate * years / 100; amountTextField.setValue(new Double(amount)); } }
输出
swingexamples_formatted_textfields.htm
广告