Нажмите на JTable Обновления модели JTextfield - PullRequest
2 голосов
/ 01 июля 2011

У меня есть 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. Такая как ссылка на учебник, оракул не очень информативен в этом вопросе, так как я не хочу обновлять строку в таблице, но в текстовых полях.

1 Ответ

5 голосов
/ 01 июля 2011

JTable имеет ListSelectionModel , доступ к которому можно получить с помощью getSelectionModel (). Вы можете добавить слушателя к нему и получать уведомления о событиях выбора строки. Слушатели должны будут реализовать интерфейс javax.swing.event.ListSelectionListener и получать уведомления через valueChanged (..). Ваш код будет чем-то похожим на это:

public ContestantAddPanel() implements ListSelectionListener {
...

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

И

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

Этого должно быть достаточно, чтобы начать, но если вам нужна дополнительная информация, пожалуйста, оставьте комментарий. Извините, у меня нет ссылок на хороший учебник.

Edit:

Как написать прослушиватель выбора списка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...