hallo,
ich möchte mir die werte einer datenbank als tabelle anzeigen lassen und werte direkt in den tabellenfeldern ueberschreiben
was bei mir funktioniert: ich kann mir die werte anzeigen lassen und auf den zu ändernden tabellenfeldern auch schreiben
die geänderten werte werden jedoch nicht übernommen - dh ich überschreibe das feld drücke enter und der alte wert steht wieder da
model.getValueAt(row, column); liefert mir den ursprünglichen wert und nicht den aktualisierten (daher kann bei mir auch das update nicht funktionierten)
ich habe auch noch eine verständnisfrage: wann wird "public void tableChanged(TableModelEvent e){...}" eigentlich aufgerufen? sobald man in das feld was tippt oder wenn man bestätigt???
bitte um eure tipps und vielen dank im vorhinein!
ich möchte mir die werte einer datenbank als tabelle anzeigen lassen und werte direkt in den tabellenfeldern ueberschreiben
was bei mir funktioniert: ich kann mir die werte anzeigen lassen und auf den zu ändernden tabellenfeldern auch schreiben
die geänderten werte werden jedoch nicht übernommen - dh ich überschreibe das feld drücke enter und der alte wert steht wieder da
Java:
public class UpdateProductGui extends JPanel implements TableModelListener{
private static final Logger logger = Logger.getLogger(JDBCProductDao.class);
ArrayList<Product> products = new ArrayList<Product>();
ProductDao pd = new JDBCProductDao();
public UpdateProductGui(){
products = pd.allProducts();
JTable table = new JTable(new MyTableModel());
table.getModel().addTableModelListener(this);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
table.setAutoCreateRowSorter(true);
//Create the scroll pane and add the table to it.
//JScrollPane scrollPane = new JScrollPane(table);
JScrollPane scrollPane = new JScrollPane( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS );
scrollPane.setViewportView(table);
//Add the scroll pane to this panel.
add(scrollPane);
}
public class MyTableModel extends AbstractTableModel {
//Die Tabellenkoepfe
String[] columnNames = {"ID","Bezeichnung","Preis"};
//Die Tabelle soll soviele Zeilen haben, wie Produkte in der Datenbank gespeichert sind.
Object[][] data = new Object[products.size()][3];
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
for (int i = 0; i < products.size(); i++){
data[i][0] = products.get(i).getId();
data[i][1] = products.get(i).getName();
data[i][2] = products.get(i).getPrice();
}
return data[rowIndex][columnIndex];
}
public boolean isCellEditable(int row, int col) {
return col >= 1;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex ){
logger.info("Eintritt mit setValueAt mit den Parametern "+aValue+" "+rowIndex+" "+columnIndex);
data[rowIndex][columnIndex] = aValue;
fireTableCellUpdated(rowIndex, columnIndex);
}
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
public void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Produkt bearbeiten");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
UpdateProductGui findProduct = new UpdateProductGui();
findProduct.setOpaque(true); //content panes must be opaque
frame.setContentPane(new UpdateProductGui());
//Display the window.
frame.pack();
frame.setVisible(true);
}
@Override
public void tableChanged(TableModelEvent e) {
logger.info("Eintritt in tableChanged mit den Parametern "+e.getFirstRow()+" "+e.getColumn());
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
logger.info("Neuer Tabellenwert in tableChanged "+model.getValueAt(row, column));
Object data = model.getValueAt(row, column);
//TODO:updatefunktionen db
}
}
model.getValueAt(row, column); liefert mir den ursprünglichen wert und nicht den aktualisierten (daher kann bei mir auch das update nicht funktionierten)
ich habe auch noch eine verständnisfrage: wann wird "public void tableChanged(TableModelEvent e){...}" eigentlich aufgerufen? sobald man in das feld was tippt oder wenn man bestätigt???
bitte um eure tipps und vielen dank im vorhinein!