Zum Inhalt springen

JTable Problem Java GUI


ADVler

Empfohlene Beiträge

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 von flashpixx
Quote Tags zu Code Tags geändert
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...