Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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_Object_Netbeans_Textfield - Fatal编程技术网

如何在java中动态设置对象?

如何在java中动态设置对象?,java,object,netbeans,textfield,Java,Object,Netbeans,Textfield,我正在用java创建一个GUI应用程序,它使用来自用户的输入,并在我的jFrame中使用默认名称(如jTextField1、jTextField2等)动态设置textfield 我的项目演示如下:- 1) 它接受组合框中的行数和列数 2) 它应该根据选择的列设置列数和行数 用户。(即,它应该在 JFrame) 我是否可以在循环语句中动态设置这些命令,并创建所需的文本字段数:- private void initComponents() { jTextField1 = new

我正在用java创建一个GUI应用程序,它使用来自用户的输入,并在我的jFrame中使用默认名称(如jTextField1、jTextField2等)动态设置textfield

我的项目演示如下:-

1) 它接受组合框中的行数和列数

2) 它应该根据选择的列设置列数和行数 用户。(即,它应该在 JFrame)

我是否可以在循环语句中动态设置这些命令,并创建所需的文本字段数:-

     private void initComponents() {
    jTextField1 = new javax.swing.JTextField();
            jTextField2 = new javax.swing.JTextField();
}


private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
或者有没有其他方法可以做到这一点

在任何其他语言(如javascript或html)中都可以这样做


感谢您的帮助

你的方法是正确的。循环遍历索引,创建新组件(JavaGUI对象)并将它们添加到容器中

请记住检查现有组件或
remove()/removeAll()

更新: 创建容器时,通常会定义一个LayoutManager(我更熟悉
GridBagLayout
,但是
XYLayout
可能对您有用)。将组件添加到容器时,您有一个方法允许额外的对象
约束
;该对象将传递给layoutManager,以了解在何处/如何绘制添加的组件

当然,每个不同的layoutManager都使用自己不同的约束,因此对于
GridBagLayout
我传递一个
GridBagConstraints
对象。在您的示例中,要生成一行,除了那些字段之外的所有字段都将由默认的GridBagConstraints添加;最后一行中的GridBagConstraints将

 GridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;

通知布局管理器它是行中的最后一项。

您应该阅读有关布局管理器的内容。在您的情况下,应该从使用GridLayout开始。读取行数和列数,使用适当的参数创建GridLayout。然后在for循环(或2个嵌套for循环)中创建文本字段,并将其添加到面板中

您将看到文本字段的数量及其位置几乎正常。
现在看看问题:文本字段的大小将取决于您的帧大小。要解决此问题,您可以将
GridLayout
替换为
BoxLayout
gridbagloayout
或将嵌套面板与流布局一起使用,或使用第三方工具,如
migloayout

首先:可以对文本字段使用数组:

JTextField[][] matrix1TextFields, matrix2TextFields, matrix3TextFields;
private void refreshMatrixComponents(int r, int c) {
  matrix1TextFields = new JTextField[r][c];
  matrix2TextFields = new JTextField[r][c];
  matrix3TextFields = new JTextField[r][c];
  for (int row = 0; row < r; row++) {
    for (int col = 0; col < c; col++) {
      matrix1TextFields[row][col] = new JTextField();
      matrix2TextFields[row][col] = new JTextField();
      matrix3TextFields[row][col] = new JTextField();
    }
  }
  placeMatrixTextField();  
}

谢谢你,先生。但是如何将这些文本字段格式化为图片中的extact位置呢。
JPanel matrix1Panel, matrix2Panel, matrix3Panel;
private void placeMatrixTextField() {
  int r = matrix1TextFields.length, c = matrixTextFields[0].length;
  matrix1Panel = new JPanel();
  matrix2Panel = new JPanel();
  matrix3Panel = new JPanel();
  matrix1Panel.setLayout(new GridLayout(r, c));
  matrix2Panel.setLayout(new GridLayout(r, c));
  matrix3Panel.setLayout(new GridLayout(r, c));
  for (int row = 0; row < r; row++) {
    for (int col = 0; col < c; col++) {
      matrix1Panel.add(matrix1TextFields[row][col]);
      matrix2Panel.add(matrix2TextFields[row][col]);
      matrix3Panel.add(matrix3TextFields[row][col]);
    }
  }
  // now place your panels
}