Java JTextField 在写入时转换为 upper/lowercase
Java JTextField Converting to upper/lowercase while writing
我有关于在 JTextField 中键入的问题。我的程序搜索几个 csv 文件并查找在 JTextField 字符串中指定的内容。我已经添加到 readLine 函数“.toLowerCase”以将所有字符串读取为小写。是否可以将 JTextField 设置为在写入 JTextField 时自动将大写转换为小写?
if (line.toLowerCase().contains(searchedString))...
您可以通过扩展 JTextfield 并覆盖 constructor/setter 方法来创建自己的 class。
是的,您可以使用 KeyListener,当在文本字段中按下某个键时,您将使输入字符串变为小写,同时将光标位置保持在原来的位置。喜欢下面的代码:
jTextField1.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
int pos = jTextField1.getCaretPosition();
jTextField1.setText(jTextField1.getText().toLowerCase());
jTextField1.setCaretPosition(pos);
}
});
来源:
- Value Change Listener to JTextField
- Finding the cursor text position in JTextField
您可以创建一个扩展 DocumentFilter class and override methods insertString and replace 的 class,以便:
- 在 insertString 方法中,它会调用它的超级方法,传入参数之一
string.toLowerCase()
- 在 replace 方法中它将调用它的 super,传入参数之一
text.toLowerCase()
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
class LowerCaseDocumentFilter extends DocumentFilter {
@Override
public void insertString(final FilterBypass fb, final int offset, final String string, final AttributeSet attr) throws BadLocationException {
super.insertString(fb, offset, string.toLowerCase(), attr);
}
@Override
public void replace(final FilterBypass fb, final int offset, final int length, final String text, final AttributeSet attrs) throws BadLocationException {
super.replace(fb, offset, length, text.toLowerCase(), attrs);
}
}
然后添加此 class 的实例,以便 JTextField 自动转换为小写:
class Main {
public static void main(String[]args) {
JFrame jFrame = new JFrame("Example");
jFrame.setSize(500, 500);
jFrame.setVisible(true);
JPanel jPanel = new JPanel();
jFrame.add(jPanel);
JTextField jTextField = new JTextField("Example JTextField");
((AbstractDocument)jTextField.getDocument()).setDocumentFilter(new LowerCaseDocumentFilter());
jPanel.add(jTextField);
jFrame.pack();
}
}
来源:
我有关于在 JTextField 中键入的问题。我的程序搜索几个 csv 文件并查找在 JTextField 字符串中指定的内容。我已经添加到 readLine 函数“.toLowerCase”以将所有字符串读取为小写。是否可以将 JTextField 设置为在写入 JTextField 时自动将大写转换为小写?
if (line.toLowerCase().contains(searchedString))...
您可以通过扩展 JTextfield 并覆盖 constructor/setter 方法来创建自己的 class。
是的,您可以使用 KeyListener,当在文本字段中按下某个键时,您将使输入字符串变为小写,同时将光标位置保持在原来的位置。喜欢下面的代码:
jTextField1.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
int pos = jTextField1.getCaretPosition();
jTextField1.setText(jTextField1.getText().toLowerCase());
jTextField1.setCaretPosition(pos);
}
});
来源:
- Value Change Listener to JTextField
- Finding the cursor text position in JTextField
您可以创建一个扩展 DocumentFilter class and override methods insertString and replace 的 class,以便:
- 在 insertString 方法中,它会调用它的超级方法,传入参数之一
string.toLowerCase()
- 在 replace 方法中它将调用它的 super,传入参数之一
text.toLowerCase()
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
class LowerCaseDocumentFilter extends DocumentFilter {
@Override
public void insertString(final FilterBypass fb, final int offset, final String string, final AttributeSet attr) throws BadLocationException {
super.insertString(fb, offset, string.toLowerCase(), attr);
}
@Override
public void replace(final FilterBypass fb, final int offset, final int length, final String text, final AttributeSet attrs) throws BadLocationException {
super.replace(fb, offset, length, text.toLowerCase(), attrs);
}
}
然后添加此 class 的实例,以便 JTextField 自动转换为小写:
class Main {
public static void main(String[]args) {
JFrame jFrame = new JFrame("Example");
jFrame.setSize(500, 500);
jFrame.setVisible(true);
JPanel jPanel = new JPanel();
jFrame.add(jPanel);
JTextField jTextField = new JTextField("Example JTextField");
((AbstractDocument)jTextField.getDocument()).setDocumentFilter(new LowerCaseDocumentFilter());
jPanel.add(jTextField);
jFrame.pack();
}
}
来源: