无法将','替换为'。'

时间:2016-06-29 20:57:13

标签: java swing keylistener

我想用句号替换逗号。

我尝试了两种方法,但它们都不起作用。

方法1:

if(evt.getKeyChar() == ','){ evt.setKeyChar('.');}

方法2:

if(evt.getKeyChar() == KeyEvent.VK_COMMA){ evt.setKeyChar(KeyEvent.VK_PERIOD);}

我试图找到一些东西来帮助我,但根本没有这样的线程。

如果您需要更多代码,我可以添加它,但我不知道您是否需要它,所以我没有添加它。

private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {                                     
// TODO add your handling code here:

char inte=evt.getKeyChar();

if (!(Character.isDigit(inte)|| inte == KeyEvent.VK_COMMA ||inte == KeyEvent.VK_PERIOD || inte==KeyEvent.VK_BACK_SPACE) || inte==KeyEvent.VK_DELETE){
if(evt.getKeyChar() == KeyEvent.VK_COMMA){ evt.setKeyChar(KeyEvent.VK_PERIOD);}
    getToolkit().beep();
    evt.consume();
}
}               

这就是我发布的所有这些线条都在,我仍然是java的新东西。所以我会让你们深思熟虑。

虽然该程序获取了数字,但除了'。'之外不允许任何其他内容。和','当我使用时,在浮点数而不是。有错误,这就是为什么我想用'。'来重温它。

2 个答案:

答案 0 :(得分:3)

您的问题实际上是XY Problem,您可以在其中询问"如何修复此代码问题"当最好的解决方案是完全使用不同的方法时。

永远不要将KeyListener添加到JTextComponent,因为这会导致危险的副作用。这里更好的是使用DocumentListener,添加到JTextField的Document或DocumentFilter。在文档更改后,侦听器会做出反应,并且过滤器会在文档更改之前作出反应,从而允许您过滤"过滤"它们发生之前的变化。

如果要更改输入到JTextField的文本,我建议使用DocumentFilter路径:

((PlainDocument) myJTextField.getDocument()).setDocumentFilter(....)

如,

import javax.swing.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.PlainDocument;

public class SwapCommaWithPeriod extends JPanel {
    private JTextField field = new JTextField(40);

    public SwapCommaWithPeriod() {
        add(field);

        ((PlainDocument) field.getDocument()).setDocumentFilter(new DocumentFilter() {
            @Override
            public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr)
                    throws BadLocationException {
                text = text.replace(",", ".");
                super.insertString(fb, offset, text, attr);
            }

            @Override
            public void replace(FilterBypass fb, int offset, int length, String text,
                    AttributeSet attrs) throws BadLocationException {
                text = text.replace(",", ".");
                super.replace(fb, offset, length, text, attrs);
            }
        });
    }

    private static void createAndShowGui() {
        SwapCommaWithPeriod mainPanel = new SwapCommaWithPeriod();

        JFrame frame = new JFrame("Swap Comma With Period");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

答案 1 :(得分:0)

您可以覆盖keyTyped方法:

添加KeyListener

tfield.addKeyListener(new KeyListeningTool());

修改KeyEvent的代码

class KeyListeningTool extends KeyAdapter {

    @Override
    public void keyTyped(KeyEvent evt) {
        if (evt.getKeyChar() == ',') {
            evt.setKeyChar('.');
        }
    }
}