无法将字符“,”替换为“.”
Can't Replace character ',' with '.'
我想用句点替换逗号。
我尝试了两种方法,但都不起作用。
方法一:
if(evt.getKeyChar() == ','){ evt.setKeyChar('.');}
方法二:
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.So 我会让你们坐下。
尽管程序获取了数字并且不允许将任何其他内容放入其中,但“.”除外。和 ',' 但是当我使用 , 浮点数而不是 .有错误,这就是为什么我想用 '.' 替换它的原因
您可以覆盖 keyTyped
方法:
添加 KeyListener
tfield.addKeyListener(new KeyListeningTool());
修改KeyEvent的代码
class KeyListeningTool extends KeyAdapter {
@Override
public void keyTyped(KeyEvent evt) {
if (evt.getKeyChar() == ',') {
evt.setKeyChar('.');
}
}
}
你的问题实际上是一个 XY Problem 你问 "how do I fix this code problem" 什么时候最好的解决方案是完全使用不同的方法。
切勿将 KeyListener 添加到 JTextComponent,因为这会导致危险的副作用。此处更好的方法是使用添加到 JTextField 的文档或 DocumentFilter 的 DocumentListener。侦听器在文档更改后做出反应,过滤器在文档更改之前做出反应,允许您 "filter" 在更改发生之前进行更改。
如果您想更改输入到 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());
}
}
我想用句点替换逗号。
我尝试了两种方法,但都不起作用。
方法一:
if(evt.getKeyChar() == ','){ evt.setKeyChar('.');}
方法二:
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.So 我会让你们坐下。
尽管程序获取了数字并且不允许将任何其他内容放入其中,但“.”除外。和 ',' 但是当我使用 , 浮点数而不是 .有错误,这就是为什么我想用 '.' 替换它的原因
您可以覆盖 keyTyped
方法:
添加 KeyListener
tfield.addKeyListener(new KeyListeningTool());
修改KeyEvent的代码
class KeyListeningTool extends KeyAdapter {
@Override
public void keyTyped(KeyEvent evt) {
if (evt.getKeyChar() == ',') {
evt.setKeyChar('.');
}
}
}
你的问题实际上是一个 XY Problem 你问 "how do I fix this code problem" 什么时候最好的解决方案是完全使用不同的方法。
切勿将 KeyListener 添加到 JTextComponent,因为这会导致危险的副作用。此处更好的方法是使用添加到 JTextField 的文档或 DocumentFilter 的 DocumentListener。侦听器在文档更改后做出反应,过滤器在文档更改之前做出反应,允许您 "filter" 在更改发生之前进行更改。
如果您想更改输入到 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());
}
}