繁体   English   中英

单击按钮后如何使JTextField出现并且仅接受与另一个字符串相同长度的字符-Java GUI

[英]How to make JTextField appear after a button click and only accept the same length of characters as another string -Java GUI

我之前曾发布过类似的问题,但被意外删除。

我的JTextField应该在单击按钮后出现,但只有在最小化窗口之后才会出现。 另一个问题是,当它只应接受一定长度的短语时,它将接受单个字符。

因为它太长了,所以这里有一些代码:

 static String answer = "MY PUZZLE", puzzle = "M- -U----"; 

  //inside constructor
  guess = new JTextField("Write in Caps");
  guess.setVisible(false); 
  guess.addActionListener(this);
  board.add(guess);



  //actionperformed
  guess.setVisible(true);
  gueStr = guess.getText();

  if (gueStr.length() != answer.length()) //if it is not the same length
  {
    gueStr = "";
  }

如果按下字母按钮(此处未显示代码)作为“答案”字符串中的字符,或者用户的猜测与答案字符串相同,则更改字符串“拼图”

  if ( gueStr.equals(answer)) //if the guess is the answer
  {
    puzzle = answer; 
  }


    for(int x=0; x < answer.length(); x++) //go through answer
    {
        if(letter == answer.charAt(x)) //if the letter pressed matches a character in answer
        {
          puzzle = puzzle.substring(0,x) + letter + puzzle.substring(x+1); //substitute in letter 
        }

    }

如果需要更多代码来理解,我可以发布它。 我很乐意提供一些指导:D

编辑:

感谢所有帮助人员,但是我还没有成功理解第二部分。

现在,我可以显示文本字段,但是问题在于接受一定的字符长度。 它的长度必须与另一个字符串的长度完全相同,不能多于或少于。

我曾尝试用你们提供的链接来实现它,但最后却感到困惑(抱歉)。 有人可以提供一个具体的例子吗?

编辑:

使用validate()并添加guess.setActionCommand(“ 1”)之后解决

使用InputVerifier验证您的文本输入

请参考以下示例:

import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JTextField;

class PassVerifier extends InputVerifier {

    public boolean verify(JComponent input) {
        JTextField tf = (JTextField) input;

        String text = tf.getText();

        // do your  validation 
//        if (text.equals(answer)) //if the guess is the answer
//        {
//            puzzle = answer;
//        }
//        for (int x = 0; x < answer.length(); x++) //go through answer
//        {
//            if (letter == answer.charAt(x)) //if the letter pressed matches a character in answer
//            {
//                puzzle = puzzle.substring(0, x) + letter + puzzle.substring(x + 1); //substitute in letter 
//            }
//        }
        return true; // return true or false according to validation  
    }
}

InputVerifier设置为JTextField

 JTextField tf1 = new JTextField ("Type \"pass\" here");
 tf1.setInputVerifier(new PassVerifier());

frame.validate()

validate方法用于使容器再次布置其子组件。 显示容器后,修改此容器的子组件(添加到容器或从容器中删除,或更改与布局有关的信息)时,应调用该方法。

这应该起作用而不是最小化窗口。

同样在第二部分中,API提供了有关如何自定义文本字段的示例: https ://docs.oracle.com/javase/8/docs/api/javax/swing/JTextField.html

执行类似于它们仅接受大写字符的方式,而是使用string.length()检查长度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM