首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java中的MaskFormatter将值设置为Jformattedtextfield

使用java中的MaskFormatter将值设置为Jformattedtextfield
EN

Stack Overflow用户
提问于 2015-08-17 08:13:22
回答 2查看 1.5K关注 0票数 0

我有一个MaskFormatter和Jformattedtextfield .The代码

代码语言:javascript
复制
try {
    mk = new MaskFormatter("**-**-**-**-**-**-**-**-**-**-**-**-**-**-**");
    mk.setPlaceholderCharacter('_');
} catch(ParseException e) {
    e.printStackTrace();
}

format1=new JFormattedTextField(mk);
format1.setBounds(170, 80, 280,25);
format1.setFont(new Font("serif",Font.PLAIN,13));
commandpanel.add(format1);

我已经向jformattedTextfield.On添加了掩蔽程序,单击了一个按钮,我试图为format1设置一个值,但是format1字段中没有显示任何内容。

这是设置值的代码。

代码语言:javascript
复制
// value may be 1E0234
String value=hashmap1.get("Command 1").substring(hashmap1.get("Command 1").lastIndexOf("-")+2, hashmap1.get("Command 1").length());

format1.setValue(value);

我还尝试使用format1.setText(value),在本例中,它显示在字段中,但没有掩蔽程序。

如何显示与掩码一起的值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-17 09:08:40

这对我来说很管用:

代码语言:javascript
复制
public class MyJFrame extends JFrame {

MyJFrame() {
    try {
        MaskFormatter mk = null;
        try {
            mk = new MaskFormatter("**-**-**-**-**-**-**-**-**-**-**-**-**-**-**");
            mk.setPlaceholderCharacter('_');
        } catch (ParseException e) {
            e.printStackTrace();
        }
        JFormattedTextField format1 = new JFormattedTextField(mk);
        format1.setBounds(170, 80, 280, 25);
        format1.setFont(new Font("serif", Font.PLAIN, 13));
        String value = "ZZ-99-ZZ-99-ZZ-99-ZZ-99-ZZ-99-ZZ-99-ZZ-99-ZZ";//hashmap1.get("Command 1").substring(hashmap1.get("Command 1").lastIndexOf("-")+2, hashmap1.get("Command 1").length());
        String display = mk.valueToString(value);
        System.out.println("display = " + display);
        format1.setValue(value);
        add(format1);
        pack();
    } catch (ParseException ex) {
        Logger.getLogger(MyJFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MyJFrame().setVisible(true);
        }
    });
}
}

如果值为"zz-99“,则显示

代码语言:javascript
复制
zz-99-__-__-__-__-__-__-__-__-__-__-__-__-__
票数 1
EN

Stack Overflow用户

发布于 2015-08-17 09:10:35

在我看来,您正在尝试输入字段无法处理的值。您需要找到使您的值符合您想要的格式的方法。那就祝你好运。

这个对我有用

代码语言:javascript
复制
public class FormattedTextFieldTest {
    public static void main(String[] args) {
        try {
            JFrame frame = new JFrame();
            JPanel contentPane = new JPanel(); // default flow layout
            frame.setContentPane(contentPane);
            MaskFormatter mk = new MaskFormatter("**-**-**-**-**-**-**-**-**-**-**-**-**-**-**");
            JFormattedTextField field = new JFormattedTextField(mk);
            contentPane.add(field);
            frame.pack();
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.setVisible(true);

            // Doesnt work
            //field.setValue("1E0234");
            //field.setValue("ZZ99ZZ99ZZ99ZZ99ZZ99ZZ99ZZ99");

            // Works for me
            field.setValue("1E-02-34");
            //field.setValue("ZZ-99-ZZ-99-ZZ-99-ZZ-99-ZZ-99-ZZ-99-ZZ-99");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

(Postdata)我注意到已经有this answer (它得到了所有的荣誉)。显然,两者都提供了工作代码,而我的则显然是后验的。我为什么要留着它?

  • 在发布任何答案之前,我都是在评论中对这个问题进行疑难解答。是我促使OP获得实际值,是实际问题。不幸的是,另一个人跳过我的肩膀,得到了所有的荣誉,而我正在提示为什么"ZZ-99 .“不被接受( OP声称它不起作用,但正如示例所示,IT应该是),然后另一个家伙在我得到我的工作示例的那一刻就发布了。
  • 我的答案有一些被接受的答案所没有的独特优点。First它清楚地显示了哪些值被接受,哪些值不被接受,哪个在回答问题方面做得更好。而不太重要的是,当您关闭框架时,第二不会留下僵尸进程,而third则会更干净地处理与问题无关的内容。
  • 如果在这一点上有任何理由,我应该删除我的答案,请发表意见,然后才投反对票。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32045576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档