【难题】如何让 JTextField 显示输入内容匹配固定格式 用javax.swing.JFormattedTextField试一试 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当JTextField失去焦点时检测一下格式,做一下转换 有一个重量级的方法:用一个jtable,设成只有一行一列,再写一个TableRenderer,久很容易实现了。不过就是怕你嫌太重了。 写个method,虽然有点麻烦,但语句也不多.用stringTokenizer来载取字符. import java.util.*;import java.text.*;public class LocalTest{ public static void main(String args[]) { NumberFormat currNumberFormat; double currNumber = 352000.53; Locale currLocale = Locale.CHINA; currNumberFormat = NumberFormat.getCurrencyInstance(currLocale); String s = currNumberFormat.format(currNumber); System.out.println(s); }}先用String number =getText()得到用户输入的数字,然后用currNumberFormat.format()转化,如果转化成功的话,把转化后的字符串用setText()放到输入的JTextField中,但是在提交数据的时候用保存在number中的字符串再转化回double或者float! to: farandfaraway(遥远) 和 flywind63(紫色的偶然) 结合两者,这方法太单纯了,我的期望是动态的匹配格式。 而且照这样做还另外需要自行提供一个 String 存储数据。其实我自己的第一方案就是这样做。我测试一下文档时间做动态格式匹配,如果可以的话继承 JTextField 做一个 http://www.javaworld.com/javaworld/jw-06-2001/jw-0601-cents.html這裹是你要的 我试着用JTable做了一个,基本上可以实现。不过是万变不离其中了,把代码整理一下就可以轻易实现你想要的功能。如果你认为这样的代码太沉重了,你可以用JFormattedTextField,基本的原理还是一样的,只不过要自己写焦点事件。用两个Component切换,一个是Editor,一个是Renderer. public void test() { try{ final DecimalFormat df = new DecimalFormat("###,###.00"); class TableModel extends DefaultTableModel{ public int getColumnCount(){ return 1; } public int getRowCount(){ return 1; } public boolean isCellEditable(int row, int col){ return true; } } class Renderer extends DefaultTableCellRenderer{ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (value != null) label.setText("¥" + value); return label; } } JTable table = new JTable(); table.setModel(new TableModel()); table.getColumnModel().getColumn(0).setCellRenderer(new Renderer()); table.setPreferredSize(new Dimension(200, 50)); table.setRowHeight(50); jpnlButton.add(table, null); } 感谢 aiirii(ari-爱的眼睛), 但这个不是我所需要的。 请问:“哈尔滨java培训讲师的课时费是多少?” 如何删除监听 IO 包里的那些类具体用途 请问如何清空JTree的所有子节点 36进制问题 急!急!急!!偶笔记本的WINXP的用户密码忘了怎么办!?在线等待! 怎样为SSLContext创建一个实例? 用jbuilder连sql server,出现DataSet has no unique row identifiers错误 直接修改class文件的可能性!? 又来送分啦~~ 子窗口中的String[]如何返回给父窗口? 为什么我读取txt文件是乱码,文件是按照unicode存的,代码如下:
用一个jtable,设成只有一行一列,再写一个TableRenderer,久很容易实现了。不过就是怕你嫌太重了。
虽然有点麻烦,但语句也不多.
用stringTokenizer来载取字符.
import java.text.*;public class LocalTest
{
public static void main(String args[])
{
NumberFormat currNumberFormat;
double currNumber = 352000.53;
Locale currLocale = Locale.CHINA;
currNumberFormat = NumberFormat.getCurrencyInstance(currLocale);
String s = currNumberFormat.format(currNumber);
System.out.println(s);
}
}
先用String number =getText()得到用户输入的数字,然后用currNumberFormat.format()转化,如果转化成功的话,把转化后的字符串用setText()放到输入的JTextField中,但是在提交数据的时候用保存在number中的字符串再转化回double或者float!
而且照这样做还另外需要自行提供一个 String 存储数据。其实我自己的第一方案就是这样做。我测试一下文档时间做动态格式匹配,
如果可以的话继承 JTextField 做一个
這裹是你要的
基本的原理还是一样的,只不过要自己写焦点事件。用两个Component切换,一个是Editor,一个是Renderer. public void test() {
try{
final DecimalFormat df = new DecimalFormat("###,###.00");
class TableModel extends DefaultTableModel{
public int getColumnCount(){
return 1;
} public int getRowCount(){
return 1;
}
public boolean isCellEditable(int row, int col){
return true;
}
} class Renderer extends DefaultTableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel)super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
if (value != null)
label.setText("¥" + value);
return label;
}
} JTable table = new JTable();
table.setModel(new TableModel());
table.getColumnModel().getColumn(0).setCellRenderer(new Renderer());
table.setPreferredSize(new Dimension(200, 50));
table.setRowHeight(50);
jpnlButton.add(table, null);
}