【问题标题】:I want to get capital alphabet without pressing caps lock on and shift key我想在不按大写锁定和 shift 键的情况下获得大写字母
【发布时间】:2012-01-25 21:47:50
【问题描述】:

如果我在jtextfield 中给出一个字母值而不使用 caps lockshift 键,它应该给出大写字母值。我不知道如何克服这个问题。给我一个代码来解决这个问题。

【问题讨论】:

  • 你的问题是 jtextfield 大写输入或者你想大写它,不管大写锁定和移位?
  • 我希望 jtextfield 应该大写输入。
  • 我没有看到任何问题。我也没有看到你试图自己尝试。提示:这很容易弄清楚(如果是家庭作业,你应该自己做)。
  • 字符串值=text1.getText();字符串 str=value.toUpperCase();text1.setText(str);
  • 这是我使用的代码,但我不想使用此代码。因为输入转换在 jtextfield 中可见。所以我想使用另一个代码。

标签: java swing jtextfield


【解决方案1】:

您可以处理文本字段的 on key up 事件并将文本重置为 toUpperCase。

textField.setText(textField.getText().toUpperCase());

这里展示了一个更好的方法

http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/JTextField.html

【讨论】:

  • 这行不通。问这个问题的人想要一个 JTextField,当他键入任何字母时,即使字段上没有 capsLock,仍然需要大写
  • 我认为你没有抓住重点。当您收到按键事件时,在按键上 - 文本被重置。所以不管 CAPSLOCK 它总是设置为大写。
【解决方案2】:

试试

jtextfield.addKeyListener(new KeyAdapter(){
   keyReleased(KeyEvent e) {
      jtextfield.setText(jtextfield.getText().toUpperCase());
   }

});

【讨论】:

  • jtextfield.addKeyListener(new KeyAdapter(){ keyReleased(KeyEvent e) { jtextfield.setText(jtextfield.getText().toUpperCase()); } });
  • 此代码在我释放密钥后将密钥转换为大写。所以我想在按下时进行转换,将使用按键。
  • @StanislavL 我同意,但问题是输入输入。为了适应所有情况,您应该使用 actionPropertyChanged() 传递属性更改操作。
  • 我试过了,keypressed() 在我按下第二个键后正在转换。
  • StanislavL 5 小时前给出了答案。
【解决方案3】:

定义一个DocumentFilter 并分配给JTextFiledDocument 或者只是扩展JTextField 中使用的PlainDocument 并覆盖insertString() 方法。将String参数转换为大写形式并传递给super.insertString()

【讨论】:

  • +1,DocumentFilter 比使用自定义 Document 更受欢迎,因为过滤器也可以用于其他文本组件。
【解决方案4】:

可以通过扩展模型和更改提供的默认模型轻松创建自定义字段。例如,以下代码将创建一个仅包含大写字符的字段。即使从剪贴板粘贴文本或通过程序更改对其进行更改,它也可以工作。

 public class UpperCaseField extends JTextField {

     public UpperCaseField(int cols) {
         super(cols);
     }

     protected Document createDefaultModel() {
         return new UpperCaseDocument();
     }

     static class UpperCaseDocument extends PlainDocument {

         public void insertString(int offs, String str, AttributeSet a)
             throws BadLocationException {

             if (str == null) {
                 return;
             }
             char[] upper = str.toCharArray();
             for (int i = 0; i < upper.length; i++) {
                 upper[i] = Character.toUpperCase(upper[i]);
             }
             super.insertString(offs, new String(upper), a);
         }
     }
 }

礼貌:JTextField

【讨论】:

  • 为什么要把UpperCaseDocument作为静态内部类,然后实例化呢?
  • @Efthymis 您不必这样做 - 但如果您这样做,它可以在没有封闭类实例的情况下重复使用
猜你喜欢
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
相关资源
最近更新 更多