我想用句号替换逗号。
我尝试了两种方法,但它们都不起作用。
方法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的新东西。所以我会让你们深思熟虑。
虽然该程序获取了数字,但除了'。'之外不允许任何其他内容。和','当我使用时,在浮点数而不是。有错误,这就是为什么我想用'。'来重温它。
答案 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('.');
}
}
}