Hej,
Piszę sobie kod dla JButtona, który będzie miał akcję drukowania tylko wybranych wierszy na JTable, która ma połączenie z bazą danych SQL. Do chwili obecnej wszystko szło spoko i samo drukowanie ogarniam, ale pojawił się mały problem z przygotowaniem zaznaczonych wierszy do drukowania.
Problem wygląda tak, że zaznaczam wybrane wiersze -> klikam "print" -> i po repaincie tablicy (która ma wyświetlić tylko te wiersze, które zaznaczyłem, a które w dalszej akcji JButtona zostaną wydrukowane) fakt faktem wyświetla mi np. 4 wiersze jeśli zaznaczyłem taką ich liczbę, ale wszystkie wyświetlone wiersze są klonem "ostatniego" wiersza, na którym skończyłem zaznaczanie. Wychodzi na to, że robię gdzieś błąd "merytoryczny" w drugiej pętli "for". Będę ogromnie wdzięczny za pomoc!
Wizualizacja problemu:
I kod:
JButton btnPrintDatabase = new JButton("Print database");
btnPrintDatabase.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
//IMP: PrintDatabaseButton
MessageFormat header = new MessageFormat("Informations about users from 'admindatabase'");
MessageFormat footer = new MessageFormat("Page{0, number, integer}");
try
{
String sql = "SELECT * FROM admindatabase";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
ResultSetMetaData rsmetadata = rs.getMetaData();
int columns = rsmetadata.getColumnCount();
DefaultTableModel dtm = new DefaultTableModel();
Vector data_rows = new Vector();
Vector columns_name = new Vector();
for (int i = 1; i <= columns; i++)
{
columns_name.addElement(rsmetadata.getColumnName(i));
}
dtm.setColumnIdentifiers(columns_name);
int selectedRows[] = table.getSelectedRows();
for (int i = 0; i < selectedRows.length; i++)
{
String tableSelectedRow = (table.getModel().getValueAt(selectedRows[i], 0).toString());
String sqlRows = "SELECT * FROM admindatabase WHERE UserID='"+tableSelectedRow+"'";
ps = conn.prepareStatement(sqlRows);
rs = ps.executeQuery();
if (rs.next())
{
for (int j = 1; j <= columns; j++)
{
data_rows.addElement(rs.getString(j));
}
dtm.addRow(data_rows);
}
}
table.setModel(dtm);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null, e);
}
//Dalsza część akcji odpowiedzialna za drukowanie.
}
});
Pozdrawiam!