Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同的'访问变量;姓氏';_Java_Swing_Jtextfield - Fatal编程技术网

Java 使用不同的'访问变量;姓氏';

Java 使用不同的'访问变量;姓氏';,java,swing,jtextfield,Java,Swing,Jtextfield,我正在使用Netbeans创建Java应用程序。我从jTextField1到jTextField16创建了一些名为它的文本字段。现在我必须将这些文本字段的值存储在一个2d数组中,但我不知道如何做到这一点。我想使用for循环访问所有文本字段 我应该如何使用for循环处理这些变量 int Count=0; for (int i=0; i<4; i++) { for (int j=0; j<4; j++) { a[i][j] = Integer.parseInt(j

我正在使用Netbeans创建Java应用程序。我从
jTextField1
jTextField16
创建了一些名为它的文本字段。现在我必须将这些文本字段的值存储在一个2d数组中,但我不知道如何做到这一点。我想使用for循环访问所有文本字段

我应该如何使用for循环处理这些变量

int Count=0;
for (int i=0; i<4; i++) {
    for (int j=0; j<4; j++) {
        a[i][j] = Integer.parseInt(jTextField1.getText());
    }
}
int Count=0;
对于(int i=0;i而不是

JTextField field1 = ...;
JTextField field2 = ...;
...
JTextField field16 = ...;
您可以使用数组:

JTextField[] fields = new JTextField[16];
fields[0] = ...;
fields[1] = ...;
...
fields[15] = ...;
这样,循环就很容易编写:

a[i][j] = Integer.parseInt(fields[i * 4 + j].getText());
编辑

在Netbeans中,您可以使用“查找和替换”自动替换所有变量。例如,假设变量名为
jField1
jField2
等,您可以执行以下操作:

  • 在项目中编辑>替换
  • 包含文本:
    jField(\d+)
  • 勾选“正则表达式”
  • 替换为:
    字段[$1]
  • 范围:选择您的文件
  • 查找->打开一个搜索窗口
  • 单击“替换匹配项”
  • 然后,您需要通过将所有索引减一(必须是手动的)来最终确定它
瞧,不到一分钟


或者,如果只有几个变量需要更改,您可以简单地将光标放在一个变量名上,按CTRL+R并更改名称:它将自动更改项目中该变量出现的所有情况。

使用“普通”Java无法做到这一点

您可以(例如)创建表示字段名的字符串,并使用反射来查找
字段
对象,然后检索它们的值。但这是复杂、脆弱和低效的……这是一个坏主意


更好的解决方案是不将文本字段存储为单个变量。使用数组代替,然后可以对它们进行索引。

正如其他提到的,您不能这样做

在这里,您可以做的最好的事情是创建一个
JTextField
s数组并在其上循环:

int k = 0;
for (int i=0; i<4; i++) {
    for (int j=0; j<4; j++) {
        a[i][j] = Integer.parseInt(jTextFieldArray[k].getText());
        k++;
    } 
}
intk=0;

因为(inti=0;i最终是这样做的

int a[][]=new int[4][4];
void convert() {
    JTextField jt[] = new JTextField[]{jTextField1, jTextField2, jTextField3, jTextField4, jTextField5, jTextField6, jTextField7, jTextField8, jTextField9, jTextField10, jTextField11, jTextField12, jTextField13, jTextField14, jTextField15, jTextField16};
    int count=0;
    for (int i=0; i<9; i++) {
        for (int j=0; j<9; j++) {
        a[i][j]=Integer.parseInt(jt[count].getText());
        count++;
        }
    }
}
int a[][]=新int[4][4];
void convert(){
JTextField jt[]=新的JTextField[]{jTextField1、jTextField2、jTextField3、jTextField4、jTextField5、jTextField6、jTextField7、jTextField8、jTextField9、jTextField10、jTextField11、jTextField12、jTextField13、jTextField14、jTextField15、jTextField16};
整数计数=0;

对于(int i=0;i为什么您没有尝试创建jtextfield的数组呢?请说得更具体一点很难理解您想要做什么您在这里展示的代码是将
jTextField1
的整数值放置在2D数组的每个位置。您的意思不是:
parseInt(jtextfield.getText())
?您试图做的事情之所以不可能(或故意困难),是有原因的,它会导致真正可怕的代码,没有类型检查等变量“start”+“end”的类型无法在编译时确定,因此编译器只能假设它工作。正如其他人所说,数组是这个问题的正确解决方案。无论如何,我知道这个方法,但有什么更简单的方法吗(我懒得更改变量名)@Sar009恐怕我无法解决您的懒惰问题。但是请注意,通过简单的查找和替换,它不应该超过一分钟,也就是说,比您发布问题所用的时间还短。@Sar009我保证这样做将解决您在其netbeans好友之后寻找phatom错误的可怕调试时间,并且您必须转到每个文本字段单独修改:(@Sar009否,您需要学习如何使用IDE;-)。例如,使用正则表达式。