У меня есть JTable в моей программе, и я хочу, чтобы пользователь мог обновлять таблицу одним нажатием кнопки.
public void popUpWindow(JTable t)
{
JFrame frame=new JFrame();
DefaultTableModel dtm=new DefaultTableModel(data,columnNames);
t.setModel(dtm);
JButton btnEdit=new JButton("Edit");
JButton btnUpdate=new JButton("Update");
btnUpdate.setEnabled(false);
JButton btnDelete=new JButton("Delete");
btnEdit.setBounds(150, 220, 100, 25);
btnUpdate.setBounds(150, 260, 100, 25);
btnDelete.setBounds(150, 300, 100, 25);
JScrollPane jsp=new JScrollPane(t);
jsp.setBounds(0, 0, 880, 200);
frame.setLayout(null);
frame.add(jsp);
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
frame.add(btnEdit);
frame.add(btnUpdate);
frame.add(btnDelete);
frame.setSize(900,400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
int row,column;
btnEdit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
t.setEnabled(true);
btnUpdate.setEnabled(true);
}
});
btnUpdate.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(t.isEditing())
{
row=t.getEditingRow();
column=t.getEditingColumn();
// System.out.println("row : "+row+" column : "+column);
Object s=dtm.getValueAt(row, column);
dtm.setValueAt(s, row, column);
dtm.fireTableCellUpdated(row,column);
// System.out.println(s);
}
}
});
}
Всякий раз, когда я нажимаю кнопку «Обновить», содержимое ячейки не обновляется. Что может быть причиной этого?
Функционирование кнопки «обновить»: всякий раз, когда пользователь нажимает на нее, jtable входит в режим редактирования, и пользователь может редактировать уже заполненное содержимое jtable. Я хочу сохранить отредактированное значение ячейки в определенной переменной, и для этой цели я выбрал переменную s, т. е. «s» будет хранить отредактированное содержимое ячейки.
t.isEditing()
? не будет ли это ложным, если вы покинете ячейку, чтобы нажать JButton? Мне это кажется схематичным, это и то, что вы меняете данные при повторном извлечении модели таблицы, а затем запускаете метод уведомления для переменной dtm. Вроде бы одно и то же, но все равно выглядит забавно. Кроме того, это окно верхнего уровня должно быть JDialog не JTable. - person Hovercraft Full Of Eels   schedule 24.03.2016isEditing()
- это когда вы сейчас редактируете ячейку в таблице, чего вы не можете сделать, когда фокус нажимает кнопку. Возможно, вам больше повезет с получением выбранных ячеекtable.getSelectedRow()
иtable.getSelectedColumn()
. Также кажется, что вы просто устанавливаете один и тот же объект в одну и ту же ячейку, не меняя его. - person Matthew Wright   schedule 24.03.2016System.out.println("Update at ["+row+", "+column+"]");
, чтобы убедиться, что он действительно работает. Но из того, что я сказал ранее, может показаться, что ничего не происходит, потому что вы ничего не делаете сObject s
. Вы получаете значение и устанавливаете его обратно. - person Matthew Wright   schedule 24.03.2016Object s
осмысленным образом. - person Matthew Wright   schedule 24.03.2016