当前位置: 首页 > 面试题库 >

如何使光标可以输入jtextfield,但给它文本的唯一方法是单击按钮?

陶元凯
2023-03-14
问题内容

我有jTextfield和jButton。

如何

  • 用户可以单击jTextfield(鼠标可以在jtextfield上输入/退出),但是如果用户键入内容,它将不会执行任何操作(退格键会删除整个文本)
  • 当用户单击按钮时,它将

jTextfield.setText(“ something”);

所以给jtextfield文本的唯一方法是单击按钮

  • 当其中有文本时(当光标位于jtextfield内时),然后用户键入一个退格键,它将删除jtextfield上的整个文本。

这该怎么做?

原谅我的英语..非常感谢你的帮助。


问题答案:

使用DocumentFilter,只需将其添加到您的JTextField喜欢的代码中即可:

 public class Test {

    public void initComponents() {

        //create frame

        //add DoucmentFilter to JTextField
        MyDocumentFilter myFilter = new MyDocumentFilter();
        JTextField myArea = new JTextField();
        ((AbstractDocument)myArea.getDocument()).setDocumentFilter(myFilter);

         //add components set frame visible
    }

 }

class MyDocumentFilter extends DocumentFilter {

    @Override
    public void replace(FilterBypass fb, int i, int i1, String string, AttributeSet as) throws BadLocationException {
        super.replace(fb, i, i1, string, as);
    }

    @Override
    public void remove(FilterBypass fb, int i, int i1) throws BadLocationException {
        super.remove(fb, i, i1);
    }

    @Override
    public void insertString(FilterBypass fb, int i, String string, AttributeSet as) throws BadLocationException {
        super.insertString(fb, i, string, as);
    }

}

或者

您可能想要创建一个自定义JTextField,该自定义JTextField已经具有DocumentFilter(出于可重用性)类似:

public class MyCustomField extends JTextField {

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

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

    static class MyDocument extends DocumentFilter {

        @Override
        public void insertString(FilterBypass fb, int i, String string, AttributeSet as) throws BadLocationException {
            super.insertString(fb, i, string, as);
        }

        @Override
        public void remove(FilterBypass fb, int i, int i1) throws BadLocationException {
            super.remove(fb, i, i1);
        }

        @Override
        public void replace(FilterBypass fb, int i, int i1, String string, AttributeSet as) throws BadLocationException {
            super.replace(fb, i, i1, string, as);
        }
    }
}

从Hovercraft
进行 编辑, 我在考虑这些方面

import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.text.*;

public class Test {

   public void initComponents() {

      JPanel panel = new JPanel();
      final MyDocumentFilter myFilter = new MyDocumentFilter();
      final JTextField myArea = new JTextField(20);
      ((AbstractDocument) myArea.getDocument()).setDocumentFilter(myFilter);

      panel.add(myArea);

      panel.add(new JButton(new AbstractAction("Set Text") {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            myFilter.setFiltering(false);
            myArea.setText("Fe Fi Fo Fum");
            myFilter.setFiltering(true);
         }
      }));

      JOptionPane.showMessageDialog(null, panel);

      // add components set frame visible
   }

   public static void main(String[] args) {
      new Test().initComponents();
   }

}

class MyDocumentFilter extends DocumentFilter {
   private boolean filtering = true;

   @Override
   public void replace(FilterBypass fb, int i, int i1, String string,
         AttributeSet as) throws BadLocationException {
      if (!filtering) {
         super.replace(fb, i, i1, string, as);
      }
   }

   @Override
   public void remove(FilterBypass fb, int i, int i1)
         throws BadLocationException {
      int offset = 0;
      int length = fb.getDocument().getLength();
      super.remove(fb, offset, length);
   }

   @Override
   public void insertString(FilterBypass fb, int i, String string,
         AttributeSet as) throws BadLocationException {
      if (!filtering) {
         super.insertString(fb, i, string, as);         
      }
   }

   public void setFiltering(boolean filtering) {
      this.filtering = filtering;
   }

}


 类似资料:
  • 问题内容: 当鼠标单击该文本字段时,我需要使该程序清除文本字段中的文本。我已经尝试了一些方法,但是还没有一个对我有用。 这是完整的代码: 问题答案: TL; DR 无论如何,注册和替代对我有用, 我希望这个例子能使您正确地开始!

  • 我是图形用户界面的新手,在以下问题上有困难。我有3个JTextFields,信用卡号码,有效期和安全号码。我可以将信息输入到字段中。我还为每个按钮实现了焦点侦听器。如果我单击它,它会显示获得焦点,如果我单击其他任何地方,它会失去焦点。在这些文本字段下,我有一个数字键盘(触摸屏/鼠标单击)来输入数字。我如何保持对特定文本字段的焦点,直到仅特定地单击另外两个文本字段中的一个?一旦我尝试单击输入数字,当

  • 我已经为项目中的多个Jtextfields编写了代码,并为每个字段使用了Enter Key的KeyPressed事件。现在我使用一个触摸监视器。 现在我想使用一个按钮,通过按键盘上的回车键来做同样的事情。 (不想要grabfocus()或任何其他解决方案。只想知道有什么方法可以通过代码按回车键并运行我编码的每个字段的代码。)示例字段 下面是一个示例框架。 如果我的光标在字段1上,我想运行我在中使用

  • 我在应用程序中使用微调器和TextInputText,当用户选择微调器项目时,我想更改一些EditText功能(Curor和HintText颜色)。这是我的代码: 我不知道为什么这样不行。有人能帮我吗?

  • defineequationquadratic: selectsolutionsungratic:

  • 我正在制作一个简单的计算器。我有三个文本框:textBox1(第一个操作数)、textBox2(第二个操作数)和textBox3(结果)。我有许多可以执行的操作数函数。我还有一个按钮,可以清除所有字段以及其他功能。 只有当光标在特定的文本框中时,我才能使用按钮删除该文本框中的文本。 例如:如果光标位于文本框1中,则该按钮仅清除该文本框。 非常感谢您的帮助。