2011-07-01 8 views
2

私はカスタム抽象テーブルモデルを持つJTableを持っています。テーブルの行を選択し、その情報を左のテキストボックスに表示したいと思います。私はこれを自動的に任意のボタンの使用を使用して発生したいと思います。私が考えることができる唯一のアプローチはボタンを必要とします。このように見ている私のテーブルのためのコードでJTable Model Updatesをクリックしてください。JTextfield

public class AdminTableModel extends AbstractTableModel { 
private ArrayList<Contestant> contestants; 
private String[] columns={"First Name", "Last Name", "Entry"}; 

public AdminTableModel(ArrayList<Contestant> contestants) { 
    this.contestants = contestants; 
} 

public AdminTableModel(List l) { 
    contestants.addAll(l); 
} 

public int getRowCount() { 
    return contestants.size(); 
} 

public int getColumnCount() { 
    return columns.length; 
} 

public String getColumnName(int col) { 
    return columns[col]; 
} 

public Object getValueAt(int row, int col) { 
    Contestant contestant = contestants.get(row); 
    switch(col){ 
     case 0: 
      return contestant.getFirst_name(); 
     case 1: 
      return contestant.getLast_name(); 
     case 2: 
      return contestant.getEntry(); 
     default: 
      return null; 
    } 
} 

} 

:私のテーブルモデルは、次のようになります。ここ

public class ContestantsTable extends JTable{ 

public ContestantsTable(ArrayList<Contestant> contestants) { 

    AdminTableModel atModel = new AdminTableModel(contestants); 
    this.setModel(atModel); 
    atModel.fireTableDataChanged(); 
} 

} 

私はリフレッシュしたいテキストフィールドを持つパネルである:

public class ContestantAddPanel extends JPanel { 
private JLabel jlFirst_name; 
private JLabel jlLast_name; 
private JLabel jlEntry; 

private JTextField jtfFirst_name; 
private JTextField jtfLast_name; 
private JTextField jtfEntry; 

public ContestantAddPanel() { 
    jlFirst_name = new JLabel("First Name: "); 
    jlLast_name = new JLabel("Last Name: "); 
    jlEntry = new JLabel("Entry: "); 

    jtfFirst_name = new JTextField(); 
    jtfLast_name = new JTextField(); 
    jtfEntry = new JTextField(); 

    this.setLayout(new GridLayout(3,2)); 

    this.add(jlFirst_name); 
    this.add(jtfFirst_name); 
    this.add(jlLast_name); 
    this.add(jtfLast_name); 
    this.add(jlEntry); 
    this.add(jtfEntry); 
} 

public String getFirstName(){ 
    return jtfFirst_name.getText(); 
} 

public String getLastName(){ 
    return jtfLast_name.getText(); 
} 

public String getEntry(){ 
    return jtfEntry.getText(); 
} 
} 

私はあなたに私が解決策を書くことを望んでいない、私は私がgoogle上で欲しいものを見つけることができないように私はガイダンスを探しています。チュートリアルへのリンクのように、私はテーブルの行を更新するのではなく、テキストフィールドを更新したいので、この問題についてはあまり有益ではありません。

+0

は、あなたが見てきました[ユーザーの選択](http://download.oracle.com/javase/tutorial/uiswing/components/table.html#selection)と 'のListSelectionListener '? – trashgod

答えて

5

JTableにはListSelectionModelがあり、getSelectionModel()でアクセスできます。リスナーを追加して、行選択イベントの通知を受け取ることができます。リスナーはjavax.swing.event.ListSelectionListenerインタフェースを実装する必要があり、valueChanged(..)を介して通知を受けます。あなたのコードは、これに似たような何かになります:

public ContestantAddPanel() implements ListSelectionListener { 
... 

    public valueChanged(ListSelectionEvent e) { 
     ... 
    } 
... 
} 

そして

myTable.getSelectionModel().addListSelectionListener(<some instance of your panel>); 

これは、あなたが始めるのに十分でなければならないが、あなたはより多くの情報が必要な場合は、コメントを投稿してください。私は良いチュートリアルへのリンクがありません、ごめんなさい。

編集:

How to Write a List Selection Listener

+4

+1、Swingチュートリアルへのリンクを追加しました。 – camickr

+0

ありがとうございました:) – Dean