0

ユーザーからの入力を使用し、jTextField1、jTextField2などのデフォルト名でjFrameにテキストフィールドを動的に設定するJavaでGUIアプリケーションを作成しています

私のプロジェクトのデモは次のとおりです:-

ここに画像の説明を入力

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()それらを確認することを忘れないでください。

更新: Container を作成するときは、通常 LayoutManager を定義します (私は に精通してGridBagLayoutXYLayoutますが、役に立つかもしれません)。コンポーネントをコンテナに追加するとき、追加のオブジェクトを許可するメソッドがありますconstraints。そのオブジェクトは、追加されたコンポーネントをどこに/どのように描画するかを知るために、layoutManager に渡されます。

もちろん、それぞれの layoutManager は独自の異なる制約を使用するためGridBagLayout、オブジェクトを渡しGridBagConstraintsます。あなたの例では、行を作成するために、フィールドを除くすべてのフィールドがデフォルトの GridBagConstraints によって追加されます。最後の行の GridBagConstraints は

 GridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;

行の最後の項目であることをレイアウト マネージャーに通知します。

于 2012-08-20T13:45:10.133 に答える
0

レイアウトマネージャーについて読む必要があります。あなたの場合は、GridLayout の使用から開始する必要があります。行と列の数を読み取り、適切なパラメーターで GridLayout を作成します。次に、テキスト フィールドを for ループ (または 2 つのネストされた for ループ) に作成し、それらをパネルに追加します。

テキスト フィールドの数とその位置がほぼ問題ないことがわかります。ここで問題を確認してください。テキスト フィールドのサイズはフレーム サイズによって異なります。この問題を解決するには、入れ子になったパネルをフロー レイアウトに置き換えるか、使用GridLayoutするBoxLayoutか、または のようなサードパーティ ツールを使用します。GridBagLayoutMigLayout

于 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(より使いにくいが、より柔軟)またはサードパーティのようなもの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 に答える