Имам 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