2010-12-01 8 views
1

JtextfieldsまたはJtextareasの形式で行列を表示する必要があるプログラムを作成する必要があります。これにより、ユーザーはそれらを書き込むことができます(各Jtextfield )。 問題は、ユーザーが指定するJtextfieldsのサイズと量(毎回異なる)でカスタムJPanelを作成する方法がわかりません。 私はすでにこの問題をGoogle検索していますが、無駄です。JTextFieldsまたはJTextAreasを使用して行列を作成する

+0

カスタマイズされたJPanelの動作の詳細については、そのようなJPanel p =新しいMyJPanel(行、列)?? – TechTravelThink

+0

私はメインパネルを持っていて、そこにTextFieldを含むパネルを追加する予定でした。このパネルには、マトリックスのサイズに応じてGridLayoutがあります。 (n行、n列) – Crox

+0

なぜJTableではないのですか? –

答えて

1

GridLayoutをご覧ください。 2つのパラメータ(行と列の数)と一緒にグリッドをまとめるのは簡単です。 JavaDocから言い換えする:

public static void main (String[] args) { 


     JPanel panel = new JPanel();  
     panel.setLayout(new GridLayout(3,2)); 
     panel.add(new JTextField("1")); 
     panel.add(new JTextField("2")); 
     panel.add(new JTextField("3")); 
     panel.add(new JTextField("4")); 
     panel.add(new JTextField("5")); 
     panel.add(new JTextField("6")); 

JTextFields

EDITの2 COL格子により3行をもたらす:ここで

するDemoという名前のクラスにおいて、いくつかの詳細である。

public class Demo { 

public static void main(final String[] args) { 
    if (args.length < 2) { 
     System.out.print("please enter row and col on commandline"); 
    } 
    SwingUtilities.invokeLater(new Runnable(){ 
     public void run() { 
      new Demo(Integer.parseInt(args[0]), Integer.parseInt(args[1])); 

     } 
    }); 

} 


public Demo(int colCnt, int rowCnt) { 
    JFrame frame = new JFrame("Demo"); 
    frame.setSize(600, 600); 
    JPanel panel = new JPanel();  
    panel.setLayout(new GridLayout(colCnt,rowCnt)); 

    for (int i =0; i < rowCnt*colCnt; i++) { 
     panel.add(new JTextField(""+i)); 
    } 

    frame.setContentPane(panel); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 
} 
+0

それはまさに私がやろうとしていたことですが、問題は、ユーザーがマトリックスのサイズを伝えた後に必要なJTextfieldの数を追加する方法を知らないことです。実行時にそれらを追加する必要があり、それを行う方法は何も見つかりません。 – Crox

+0

コードをコンパイルして実行しようとしていましたが、次のエラーが発生しました。 スタティックエラー:この呼び出しにデモのコンストラクタがありません 引数:() 候補シグネチャ:デモ、int) – Crox

+0

コードのどこかで '新しいデモ()'をしようとしていますか? – akf

0

まず、テキストフィールド\エリアの2次元配列を作成します。ユーザーの入力を取得すると、配列を初期化してすべてのウィジェットを「新規作成」することができます。それらをすべて親パネルの\ frameに追加したら、使用済みのサイズに基づいて計算を行い、トップレベルのウィンドウのサイズを変更する必要があります。それとは別に、既に提案したように、GridLayoutは直接の親コンポーネントにとっては良い選択です。

これが役に立ちます。

0

実行時に外観を変更するには、コンテンツを新しいコンポーネントに置き換えるだけです。 入力の仕方によっては、akfの答えで指定された数字を入力と置き換えます。

panel.setLayout(new GridLayout(rows, columns)); 

、その後、あなたが

add(panel); 

あなたの割り当てとJFrameの中にそれを追加し、新しいパネルを表示するしかし、行列を表示するのJPanelのサブクラスの線に沿って何かあるかもしれません。私はあなたの言葉にその印象を与えます。次に、その全体的に異なる解決策。

値を編集できるマトリックスを実装することが唯一の目標であれば、JTableの方がはるかに簡単です。これはまたdata.setRowCount(newValueに)を使用して、マトリックスの高さと幅を変更する単純化のJFrame

DefaultTableModel data = new DefaultTableModel(3 , 3);// rows, cols 
    JTable table = new JTable(data); 
    add(table); 
    pack(); 
    setVisible(true); 

に次のように置きます。

関連する問題