我有一个带有自定义抽象表模型的JTable,我想在我的表中选择一行,并将该信息显示在左侧的文本框中。我希望这可以自动发生,不使用任何按钮。我能想到的唯一方法是按钮。我的表模型如下所示:
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上找到我想要的东西。比如教程的链接,oracle在这个问题上的信息不是很多,因为我不想更新表格中的行但是在文本字段中。
答案 0 :(得分: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>);
这应该足以让您入门,但如果您需要更多信息,请发表评论。我没有任何指向好教程的链接,抱歉。
编辑: