0

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

我的项目演示如下:-

在此处输入图像描述

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

2)应根据用户的选择设置列数和行数。(即它应该在 JFrame 上动态创建 Jtextfield 对象)

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

     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)中是否可行。

任何帮助表示赞赏!

4

3 回答 3

0

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

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

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

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

 GridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;

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

于 2012-08-20T13:45:10.133 回答
0

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

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

于 2012-08-20T13:56:48.460 回答
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(更难使用,但更灵活)或第 3 方之类的东西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
}
于 2012-08-20T14:13:31.830 回答