有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中使用MaskFormatter将值swing设置为Jformattedtextfield

我有一个MaskFormatter和Jformattedtextfield。代码是

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);

我已将maskformatter添加到jformattedTextfield。单击按钮时,我试图将值设置为format1,但format1字段中没有显示任何内容

这是设置值的代码

// 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(值),在本例中,它显示在字段中,但没有maskformatter

如何显示值和遮罩


共 (2) 个答案

  1. # 1 楼答案

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

    这对我有用

    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声称它不起作用,但正如示例所示,它应该),然后另一个人就在我有工作示例的那一刻发了帖子
    • 我的答案有一些被接受的答案所没有的独特优点首先它清楚地显示哪些值被接受,哪些值不被接受,哪些在回答问题时做得更好。而不那么重要的是,当你关闭框架时,它不会留下僵尸进程,second与问题无关的东西会更干净
    • 如果任何人在这一点上有任何理由我应该删除我的答案,请在投票前发表评论
  2. # 2 楼答案

    这对我很有用:

    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”,则显示

    zz-99-__-__-__-__-__-__-__-__-__-__-__-__-__