java - 单击 JTable 模型更新 JTextfield

标签 java swing jtable

我有一个带有自定义抽象表模型的 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 接口(interface),并通过 valueChanged(..) 获得通知。您的代码将类似于以下内容:

public ContestantAddPanel() implements ListSelectionListener {
...

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

还有

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

这应该足以帮助您入门,但如果您需要更多信息,请发表评论。抱歉,我没有任何优秀教程的链接。

编辑:

How to Write a List Selection Listener

关于java - 单击 JTable 模型更新 JTextfield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542902/

相关文章:

java - 通过 AbstractTableModel 获取选定的行

java - 无法使用 ImageIcon 将图像添加到 jTable 单元格

java - 如果在 DefaultListModel 中选择之前单击按钮,可以防止崩溃吗?

Java 异常跟踪

java - 如何初始化 JRockit MBean 树

java - 异常-将异常写入包裹

java - 一直坚持使用 Java Swing Timer

java - Swing 删除 JTexField 和 JLabel

java - 如何防止 JTable 中的单个列被重新排序?

java - 使用 JSON 将包含“的 JSONObject 转换为普通字符串