ADVler Geschrieben 30. Juni 2010 Geschrieben 30. Juni 2010 (bearbeitet) Hallo zusammen, ich habe folgende Codes zusammen mit einer Access- Datenbank. Wieso kann ich die Zeilen zwar bearbeiten, aber beim Enter drücken wird nichtsmehr ins TableModel geschrieben? Kann nur per ESC-Taste abbrechen, aber die Inhalte bleiben nicht stehen. Schreibe ich eine einfache Klasse mit einer kleinen Tabelle, kann ich einfach so in der Tabelle rumtippen. Jetzt nicht. Warum? (Will später noch einen Listener anbringen um in Datenbank zu schreiben) Wer hilft mir? Viele Grüße Fabian Der Link zur Datenbank ist File-Upload.net - mediendb.mdb //import sun.rmi.transport.Connection; import java.awt.*; import java.awt.event.*; import java.lang.String; import java.sql.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*; public class Medienverwaltung2 extends JFrame { private String dbURL = "jdbc:odbc: DRIVER={Microsoft Access Driver (*.mdb)};DBQ=mediendb.mdb"; private static final String dbDriverClass = "sun.jdbc.odbc.JdbcOdbcDriver"; static { try { Thread.currentThread().getContextClassLoader().loadClass(dbDriverClass) .newInstance(); } catch (Exception e) { } } private ATableModel model; private JTable mytable; private JScrollPane scroll; private final Choice auswahl; private Connection con; private ResultSet rs; private String sql = null; JPanel center = new JPanel(); JPanel north = new JPanel(); JPanel east = new JPanel(); JPanel south = new JPanel(); JTextField eingabefeld = new JTextField(); JButton suchen = new JButton("Suchen"); JButton hinzufuegen = new JButton("Neues Medium hinzufügen"); JButton bearbeiten = new JButton("Bearbeiten muss noch weg"); JButton loeschen = new JButton("Löschen"); JButton drucken = new JButton("Drucken"); JButton favoriten = new JButton("Favoriten"); JButton verliehen = new JButton("Verliehen?"); JLabel leer1 = new JLabel("leer1"); JLabel leer2 = new JLabel("leer2"); JLabel leer3 = new JLabel("leer3"); JLabel leer4 = new JLabel("leer4"); JLabel leer5 = new JLabel("leer5"); JLabel leer6 = new JLabel("leer6 - Uhrzeit"); JLabel leer7 = new JLabel("leer7"); JLabel leer8 = new JLabel("leer8"); JLabel leer9 = new JLabel("leer9"); JLabel leer10 = new JLabel("leer10"); //JLabel leer11 = new JLabel("leer11"); public Medienverwaltung2() { super("Medienverwaltung2"); scroll = new JScrollPane(); mytable = new JTable(); model = new ATableModel(); model.addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e){ System.out.println("Änderung"); } }); getContentPane().setLayout(new BorderLayout()); mytable.setModel(model); //Platzhalter //add(new JLabel("Westen"), BorderLayout.WEST); //CENTER mytable.setAutoCreateRowSorter(true); mytable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); mytable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); mytable.setFillsViewportHeight(true); mytable.setRowHeight(32); scroll.setViewportView(mytable); scroll.setSize(1300, 1200); center.add(scroll); add(scroll, BorderLayout.CENTER); //NORTH auswahl = new Choice(); auswahl.add("Alle"); auswahl.add("Filme"); auswahl.add("Musik"); auswahl.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { anzeigen(auswahl.getSelectedItem()); } }); add(north, BorderLayout.NORTH); north.setLayout(new GridLayout(2, 5)); north.add(leer1); north.add(auswahl); north.add(eingabefeld); north.add(suchen); north.add(leer2); north.add(leer9); north.add(leer10); north.add(leer7); //EAST add(east, BorderLayout.EAST); east.setLayout(new GridLayout(5, 1)); east.add(leer3); east.add(hinzufuegen); hinzufuegen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mediumHinzufuegen(); } }); east.add(bearbeiten); east.add(loeschen); loeschen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mediumLoeschen(); } }); east.add(leer4); //SOUTH add(south, BorderLayout.SOUTH); south.setLayout(new GridLayout(1, 5)); south.add(leer5); south.add(favoriten); favoriten.setBackground(Color.WHITE); favoriten.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (favoriten.getBackground() == Color.WHITE) { favoriten.setBackground(Color.ORANGE); anzeigen("Favoriten"); } else { anzeigen(auswahl.getSelectedItem()); favoriten.setBackground(Color.WHITE); } } }); south.add(drucken); south.add(verliehen); south.add(leer6); setBounds(50, 50, 1000, 550); verbinden(); //Aufruf der Methode, die die Verbindung zu Access herstellt anzeigen(auswahl.getSelectedItem()); //Aufruf der Methode, die die Inhalte aus der Access-Tabelle "Medien" liest setVisible(true); } public static void main(String[] args) { try{ UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch(Exception e){ } Medienverwaltung2 fenster = new Medienverwaltung2(); fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private void verbinden() { try { con = DriverManager.getConnection(dbURL, "Administrator", ""); //Versuch eine Verbindung zur DB-Herzustellen } catch (Exception e) { //Keine Verbindung möglich e.printStackTrace(); } } public void anzeigen(String ausgewaehlt) { if (ausgewaehlt.equals("Filme")) { sql = "SELECT * FROM Medien WHERE Typ = 'Film';"; System.out.println("gewählt wurde" + ausgewaehlt); } if (ausgewaehlt.equals("Musik")) { sql = "SELECT * FROM Medien WHERE Typ = 'Musik';"; System.out.println("gewählt wurde" + ausgewaehlt); } if (ausgewaehlt.equals("Spiele")) { sql = "SELECT * FROM Medien WHERE Typ = 'Spiel';"; System.out.println("gewählt wurde" + ausgewaehlt); } if (ausgewaehlt.equals("Alle")) { sql = "SELECT * FROM Medien;"; System.out.println("gewählt wurde Typ: " + ausgewaehlt); } if (ausgewaehlt.equals("Favoriten")) { sql = "SELECT * FROM Medien WHERE Favorit = 1;"; } Statement stmt = null; try { stmt = con.createStatement(); } catch (Exception e) { e.printStackTrace(); } try { rs = stmt.executeQuery(sql); } catch (Exception e) { e.printStackTrace(); } resultsetINTableModel(rs, model); mytable.setModel(model); mytable.updateUI(); } public void mediumHinzufuegen() { System.out.println("befinde mich beim hinzufügen"); PreparedStatement stmt = null; sql = "INSERT INTO Medien (favorit)VALUES(false);"; try { stmt = con.prepareStatement(sql); } catch (Exception e) { e.printStackTrace(); } if (stmt == null) { throw new RuntimeException("stmt is null"); } try { stmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } anzeigen(auswahl.getSelectedItem()); } public void mediumBearbeiten() { } public void mediumLoeschen() { System.out.println("befinde mich beim löschen"); PreparedStatement stmt = null; try { int Zeile = mytable.getSelectedRow(); int ID = Integer.parseInt(mytable.getValueAt(Zeile, 1).toString()); sql = "DELETE FROM Medien WHERE MedienNR = "+ID+";"; stmt = con.prepareStatement(sql); } catch (Exception e) { e.printStackTrace(); } if (stmt == null) { throw new RuntimeException("stmt is null"); } try { stmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } anzeigen(auswahl.getSelectedItem()); } public void resultsetINTableModel(ResultSet rs, DefaultTableModel model) { ResultSetMetaData rsmd = null; int spaltenZahl = 0; try { rsmd = rs.getMetaData(); spaltenZahl = rsmd.getColumnCount(); } catch (Exception e) { e.printStackTrace(); } try { Object[] spaltenTitel = new Object[spaltenZahl]; for (int i = 1; i <= spaltenZahl; i++) { spaltenTitel[i - 1] = rsmd.getColumnName(i); } Vector<Object> rows = new Vector<Object>(); Vector<Object> rowData = null; while (rs.next()) { rowData = new Vector<Object>(); for (int i = 1; i <= 7; i++) { //rs.get String fieldVal = rs.getString(i); System.out.print(fieldVal + " "); rowData.add(fieldVal); } Boolean bol = rs.getBoolean(8); System.out.println(bol + " "); rowData.add(bol); String str = rs.getString(9); System.out.println(str + " "); rowData.add(str); rows.add(rowData); System.out.println(); } model.setDataVector(rows, new Vector<Object>(Arrays.asList(spaltenTitel))); } catch (Exception e) { e.printStackTrace(); } } } [/QUOTE] __________________________________________________ [QUOTE] import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableModel; class ATableModel extends DefaultTableModel { private static final long serialVersionUID = 3344336054980426009L; public ATableModel(){ super(); } public boolean isCellEditable(int row, int col) { return true; } public Class getColumnClass(int columnIndex) { if (columnIndex == 7) return Boolean.class; else if (columnIndex != 7) return Integer.class; return String.class; } } Bearbeitet 1. Juli 2010 von flashpixx Quote Tags zu Code Tags geändert Zitieren
Dragon8 Geschrieben 30. Juni 2010 Geschrieben 30. Juni 2010 Zum einen, benutze bitte die CODE Tags um Quelltext zu posten. In den Zitat Tags sieht es eigentlich genauso bescheiden aus, als wenn man den Quelltext gleich so in den Post einfügt. (Die CODE Tags ist die Taste mit dem Rauten-Symbol) Nun zu deinem Problem. Das besteht einfach darin, dass du in deiner TableModel Klasse sagst, dass die Spalte 8 Werte vom Typ Boolean enthält und alle anderen Spalten den Typ Integer bekommen. Dadurch überwacht die JTable aber auch gleich die Eingaben. Das heißt wenn du Änderungen vornehmen willst, und in die Zellen dann versucht Text einzugeben wird dieser abgewiesen. Das zeigt sich auch an dem roten Rahmen um die Zelle herum. Du kannst ja mal versuchen dort Zahlen einzugeben, das dürfte nämlich einwandfrei funktionieren. Zitieren
ADVler Geschrieben 30. Juni 2010 Autor Geschrieben 30. Juni 2010 Heyhey, vielen Dank für die Antwort. Eigentlich ja logisch, was ich da programmiert habe =), man muss es nur anschließend verstehen, was man gemacht hat. Grund für das TableModel war eig nur, dass der Boolean Typ nicht als 0 und 1 bzw true false, sondern als Knöpfle angezeigt wird. Das mit der roten Umrandung ist allerdings ein nettes Feature, was ich jetzt für die anderen Spalten auch einbauen werde.:beagolisc Danke auch für den Code-Hinweise, bin leider neu hier. Viele Grüße Fabian Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.