【问题标题】:JTextField is not reading the data input by the userJTextField 没有读取用户输入的数据
【发布时间】:2014-03-14 18:49:59
【问题描述】:

在这里,我正在尝试制作一个 Swing Java 应用程序,我从 JTextField t1 获取 String 并比较它是否与文本文件中的任何其他字符串匹配,然后在其中显示匹配的 String JTextField t2。但是,JTextField t1 甚至不读取用户的输入(我什至尝试过显示用户的输入) *注意:-*'main' 或这个程序的 GUI 没有问题。

JButton b1;
JTextField t1,t2;

    public void actionPerformed(ActionEvent ae){try{
    String a=t1.getText();
    String search="";
    try{
        if(a.length()!=0){
           search=atomicnumber(a);
           t2.setText(a);}
        }catch(Exception x){System.out.println("Error");}

}catch (Exception x) {System.err.println("An Unexpected error encountered."+x);}
}
public static String atomicnumber(String a){try{
              boolean found=false;
              File atmno=new File("C:/Users/DELL/Periodic/text/AtomicNumber.txt");
              String e;
                  Scanner sc=new Scanner(atmno);
             while((e = sc.nextLine()) != null){
                  if (e.startsWith(a)){
                found=true;
                return e;//break;
                }
                  return("0");}}catch(IOException x){}
return("0");}
}

【问题讨论】:

  • 你的方法没有参数。如果它不接受参数,您将永远无法使用参数调用它。
  • 我添加了一个static String a 来进行编译,我没有尝试运行或分析您的代码以查看是否可以修复它。

标签: java swing


【解决方案1】:

创建实例变量a并在方法actionPerformed中设置此变量,并在另一个方法atomicnumber中使用此实例变量。

您需要将方法 atomicnumber 设为非静态才能访问它。

【讨论】:

  • 你能定义'全局变量'吗?
  • 没有投反对票,但全局变量 a 不好。为什么不通过编辑方法来传递参数?
  • 全局平均实例变量和@tgkprog 如果OP可以改变方法的结构会更好
  • 那么您可能应该更改您的答案以明确说明 instance variable,因为这会区分好的解决方案和糟糕的解决方案。
  • 谢谢我能够导入变量。好的,所以我发现这个程序的工作有一个新问题......文本字段甚至没有读取输入......所以,(我添加了动作监听器正确)什么可能是真正的问题......?
【解决方案2】:

你创建了一个实例变量。你需要让它“可见”。还有你的startsWith方法在哪里?确保您传递了正确的参数。

伪代码

class SomeClass {
    var1 < THIS IS an instance method accessible to any method in that class

method1 {
    var2

}

method2 {
   something.doSomeMethodOn(var2) <<<<< THIS is NOT accessible
   something.doSomeMethodON(var1)<<< THIS IS!
}

【讨论】:

  • .startsWith() 是在String 类中定义的方法。
【解决方案3】:

在您的 actionperformed 方法中,您正在另一个范围内创建第二个 String a variable:该函数的范围。因此,您不是将值初始化为静态 String a 而是 String a (函数范围)。在 atomicNumber() 函数中,您正在引用静态字符串一个未初始化的变量... 尝试以下解决方案,更改:

字符串 a = t1.getText();

a = t1.getText();

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2012-02-23
    • 2011-12-13
    • 2017-03-25
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多