在输入和JTextField之间使用缓冲区

时间:2014-12-09 23:14:55

标签: java swing keylistener focuslistener

我没有使用文档过滤器或FormatMask,而是尝试不同的东西。 这是要求。让JTextField一次只接受/允许一个输入字符,唯一允许的输入是数字1-9想到游戏数独,所有其他输入都是无效的,不应该被允许。我尝试使用上述两种方法处理此问题,并且在JTextField上使用焦点时仍然会收到退格键和删除键的错误蜂鸣声。

所以我想为什么不把一些东西作为缓冲区来忽略我不想接受的所有输入数据,这是我的解决方案。

import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.*;   
import java.awt.event.*;

public class MaskField 
{    
    JFrame thisframe;
    JPanel jPanel1 = new JPanel();
    JTextField jTextField1 = new JTextField();

    public MaskField()
    {       
        thisframe = new JFrame();
        jTextField1.addFocusListener(new FocusListener(){
           @Override
           public void focusLost(FocusEvent e){}
           @Override
           public void focusGained(FocusEvent e)
           {
               JTextField thisfield = (JTextField)e.getSource();
               thisfield.getParent().requestFocus();               
           }            
        });
        jPanel1.addKeyListener(new KeyAdapter()
        {
            @Override
            public void keyReleased(KeyEvent e){}
            @Override
            public void keyTyped(KeyEvent e){}
            @Override
            public void keyPressed(KeyEvent e) 
            {   
                JPanel thispanel = (JPanel)e.getSource();
                Component[] complist = thispanel.getComponents();
                JTextField thisfield = (JTextField)complist[0];
                text = thisfield.getText();                
                if(Character.isDigit(e.getKeyChar()) && !"0".equals(Character.toString(e.getKeyChar())))
                {
                    thisfield.setText(Character.toString(e.getKeyChar()));                        
                }
                if(e.getKeyCode() == 127 || e.getKeyCode() == 8)
                    thisfield.setText("");
            }
        });
        jPanel1.setLayout(new GridLayout(1,1));
        jTextField1.setText("");
        jPanel1.add(jTextField1);
        thisframe.add(jPanel1);        
        thisframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        thisframe.setVisible(true);
        thisframe.pack();
    }
    public static void main(String args[])
    {
        new MaskField();
    }
}

我非常感谢有关如何处理此问题的任何不同想法,因为获取和更改JTextField数据非常详细。

0 个答案:

没有答案