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

时间:2012-08-20 13:41:36

标签: java object netbeans textfield

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

我的项目演示如下: -

enter image description here

  

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

     

2)应根据选择设置列数和行数   用户。 (即它应该动态创建Jtextfield对象   的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。

感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

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

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

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

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

 GridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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();  
}

对于布局管理器,有很多选项。我会推荐GridLayout(非常容易使用)或GridBagLayout(更难以使用,但更灵活)或第三方如MigLayout(您将不得不深入研究语法)一点,但我认为这是值得的努力)。我还建议为每个矩阵创建一个JPanel并将所有文本字段放在那里。然后放置JPanels +其他组件:

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
}