【问题标题】:Setting array to JTextField then removing将数组设置为 JTextField 然后删除
【发布时间】:2018-10-03 10:33:05
【问题描述】:

我想要一个用数组 A-Z 填充的 JTextField。然后当用户按下例如键盘上的 P,该字母将从 JTextField 中删除。

到目前为止,我所拥有的只有以下内容,我知道这还远远不够,所以很抱歉(而且我知道它不会起作用)。

tf_1 = new JTextField();
String[] alphabet = {"A", "B" //etc};
tf_1.setText(alphabet);
tf_1.addKeyListener(new KeyAdapter() {
 public void keyTyped(KeyEvent e) {
  // Remove letter if typed.
 }
}

在按键侦听器中,如何添加代码以从字母数组中删除键入的字母?

【问题讨论】:

  • setText 不接受数组作为参数。它接受String
  • @JaroslawPawlak 我知道,我在文中说过我知道它不起作用。我只是想展示我正在尝试做的事情,而不是根本不提供任何代码:D

标签: java arrays jframe keylistener settext


【解决方案1】:

不太好,但可以工作

//Frame maninFr = new Frame();
JTextField tf_1 = new JTextField();
//maninFr.add(tf_1);
//maninFr.show();

String[] alphabet = {"A","B"};
tf_1.setText(Arrays.toString(alphabet));
tf_1.addKeyListener(new KeyListener() {

 @Override
 public void keyTyped(KeyEvent e) {}

 @Override
 public void keyReleased(KeyEvent e) {
  String input = tf_1.getText();
  char pressed = e.getKeyChar();
  String newInput = input.replaceAll(Character.toString(pressed), "");
  System.out.println("pressed: " + pressed);
  System.out.println("newin : " + newInput);
  tf_1.setText(newInput);
 }

 @Override
 public void keyPressed(KeyEvent e) {}
});

【讨论】:

  • 谢谢,我认为这非常接近我的需要,我会试一试并回复您:D
  • 享受,欢迎 :) 顺便说一句,我会更好地使用特殊框进行输入或我认为的东西。我刚刚注意到您将有两个文本字段,那么如果有类似的东西最好实现失去焦点,并且您可以允许整个字符串替换
【解决方案2】:

我希望您的要求是听取键输入事件并从字母数组中删除输入的字符。请检查以下代码。

JTextField tf_1 = new JTextField();
String[] alphabet = { "A", "B" };
ArrayList<String> list = new ArrayList<>(Arrays.asList(alphabet));
tf_1.setText(alphabet.toString());
tf_1.addKeyListener(new KeyAdapter()
{
  public void keyTyped(KeyEvent e)
  {
    int id = e.getID();
    String keyString;
    if (id == KeyEvent.KEY_TYPED)
    {
      char c = e.getKeyChar();
      keyString = c+"";
      for (int i = 0; i < alphabet.length; i++)
      {
        if (alphabet[i].equalsIgnoreCase(keyString))
        {
          list.remove(i);
        }
      }
    }
  }
});

【讨论】:

  • 是的,我认为这已经足够接近了,我想要它所以数组设置在文本 tf1 中,然后当他们在单独的文本字段中键入“A”时,例如tf2 它将从数组中删除,并且 tf1 将被更新:D
  • 您可以将监听器添加到tf2并在其中调用tf1的setText方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多