单击JTable Model Updates JText字段



我有一个带有自定义抽象表模型的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();
}   
}

我不是在找你给我写一个解决方案,我只是在寻找指导,因为我似乎在谷歌上找不到我想要的东西。比如教程的链接,oracle的链接在这件事上没有太多信息,因为我不想更新表中的行,而是更新文本字段中的行。

JTable有一个ListSelectionModel,您可以通过getSelectionModel((访问它。您可以向其中添加侦听器,并收到行选择事件的通知。监听器需要实现javax.swing.event.ListSelectionListener接口,并通过valueChanged(..(得到通知
public ContestantAddPanel() implements ListSelectionListener {
...
   public valueChanged(ListSelectionEvent e) {
      ...
   }
...
}

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

这应该足以让你开始,但如果你需要更多信息,请发表评论。对不起,我没有任何好教程的链接。

编辑:

如何编写列表选择侦听器

最新更新