- 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
广告