【问题标题】:Java JTextField Converting to upper/lowercase while writingJava JTextField在写入时转换为大写/小写
【发布时间】:2017-06-30 09:09:07
【问题描述】:

我有关于在 JTextField 中输入的问题。我的程序通过几个 csv 文件搜索并查找 JTextField 字符串中指定的内容。我已添加到 readLine 函数“.toLowerCase”以将所有字符串读取为小写。是否可以将 JTextField 设置为在写入 JTextField 时自动将大写转换为小写?

如果 (line.toLowerCase().contains(searchedString))...

【问题讨论】:

    标签: java string jtextfield readline


    【解决方案1】:

    您可以通过扩展 JTextfield 并覆盖构造函数/设置方法来创建自己的类。

    【讨论】:

      【解决方案2】:

      是的,您可以使用 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);
          }
      });
      

      来源:

      【讨论】:

      • 完美运行!这就是我一直在寻找的。谢谢。
      • 您可以使用KeyAdapter 而不是KeyListener 为自己节省一些代码。它为您提供了无操作版本的方法,因此您只需要实现 keyReleased
      • 另请注意,这仅适用于键。其他输入方法(例如剪切和粘贴)不会小写。
      【解决方案3】:

      您可以创建一个扩展 DocumentFilter 类并覆盖方法 insertStringreplace 的类,以便:

      • 在insertString方法中它会调用它的super,传入参数之一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);
          }
      }
      

      然后添加这个类的一个实例,以便 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();
          }
      }
      

      来源: https://stackoverflow.com/a/11573312

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-23
        • 2018-08-17
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        • 1970-01-01
        • 2022-01-24
        • 2021-12-26
        相关资源
        最近更新 更多