Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » JTable Wertrückgabe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.03.2009, 16:24 Uhr
KFC Embryo
Ein Huhn


Hallo,

ich habe folgenden Code:


Code:

package GUI;



import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.EventListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;



public class Stichwortliste extends JFrame implements EventListener{

    public final static Vector COLUMN_IDENTIFIERS = new Vector() {
    {
          add("Stichworte");
    }
};

    DefaultTableModel defaultTableModel = new DefaultTableModel(10, 50);

    JTable table = new JTable(defaultTableModel);
    JTextField SuchEingabe = new JTextField(50);
    JLabel output = new JLabel();
    JScrollPane DropDown = new JScrollPane(table);
    JPanel panel = new JPanel();
    Connection con;
    String t ="";
    String h ="";

public Stichwortliste(){

        super("Vorschläge");

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        defaultTableModel.setColumnIdentifiers(COLUMN_IDENTIFIERS);
        add(table, BorderLayout.CENTER);
        add(SuchEingabe, BorderLayout.NORTH);
        add(output ,BorderLayout.SOUTH);
        add(DropDown, BorderLayout.EAST);
        table.setPreferredSize(new Dimension(640,640));
        table.setSelectionBackground(Color.RED);


        SuchEingabe.addKeyListener(new KeyListener(){

          

              public void keyPressed(KeyEvent e) {

                    //t += e.getKeyChar();;
                    //output.setText("Suchwort:" + t);
                    //initDatabaseStuff();
                }

               public void keyTyped(KeyEvent e) {

                    if(e.getKeyChar()== e.VK_BACK_SPACE){
                       t = t.substring( 0, t.length() - 1 );
                        }else{
                         t += e.getKeyChar();
                        }
                    
                    output.setText("Suchwort:" + t);
                    initDatabaseStuff();
                    
              }

            public void keyReleased(KeyEvent e) {
              
                    //t += e.getKeyChar();;
                    //output.setText("Suchwort:" + t);
                    //initDatabaseStuff();
              }

        });


        DropDown.setViewportView(table);
        pack();
        setVisible(true);
}


protected Vector findAllPersons()
{
      Vector results = new Vector();

      try {
          Statement statement = con.createStatement();
          ResultSet rs = statement.executeQuery("SELECT stichworte FROM Stichwortliste WHERE stichworte LIKE '"+t+"%'");

          while (rs.next())
          {
            Vector person = new Vector();
            person.add(rs.getString("Stichworte"));
            results.add(person);
          }
          }
          catch(SQLException e)
          {
             e.printStackTrace();
          }

      return results;
}

private void initDatabaseStuff() {

          try   {
                System.out.println("* Treiber laden");
                Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
                System.out.println("* Verbindung aufbauen");
                con = DriverManager.getConnection("jdbc:odbc:ListenDB", "", "");
                Vector results = findAllPersons();

                defaultTableModel.setDataVector(results, COLUMN_IDENTIFIERS);
                defaultTableModel.fireTableDataChanged();
                
                }
            catch (Exception e)
                {
                System.err.println("Unable to load driver.");
                e.printStackTrace();
                }
}

public static void main(String[] args) {

        new Stichwortliste();
}

}



Jetzt möchte ich dass wenn man einen aufgelisteten Eintrag mit doppelklick "andrückt" das der Wert als String zurück gegeben wird. Die Sache mit dem Event ist klar. Aber das mit der Rückgabe nicht, was könnte ich machen?

Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.03.2009, 11:00 Uhr
KFC Embryo
Ein Huhn


Weiß keiner wie es geht?
Habe ich es abermals falsch beschrieben?
Hatte noch keiner Zeit?

Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.03.2009, 22:23 Uhr
virtual
Sexiest Bit alive
(Operator)


Also,
ich bin recht schweigsam die letzte Zeit, aber in diesem speziellen Fall sollten mal ein paar Dinge gesagt werden:

1. In einem KeyListener(!) eine Datenbank-Connection aufmachen ist so ziemlich das geilste, was ich in den letzten Tagen gesehen habe. Und glaub mir: ich habe eine Menge gesehen. Bitte mach das nie nie nie nie nie nie nie nie nie nie nie nie nie nie nie nie nie nie.

2.
a) Connections müssen geclosed werden,
b) Statements müssen geclosed werden,
c) Resultsets müssen geclosed werden.

Übrigens, um Missverständnisse zu vermeiden: in der Reihenfolge c, b, a
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.03.2009, 07:26 Uhr
KFC Embryo
Ein Huhn



Zitat von virtual:

1. In einem KeyListener(!) eine Datenbank-Connection aufmachen ist so ziemlich das geilste, was ich in den letzten Tagen gesehen habe. Und glaub mir: ich habe eine Menge gesehen. Bitte mach das nie nie nie nie nie nie nie nie nie nie nie nie nie nie nie nie nie nie.



Warum nicht?
Was wäre die alternative?
Close-Befehle kommen noch.

Wie sieht es mit der Rückgabe aus, was meine eigentlich Frage war?

Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?

Dieser Post wurde am 25.03.2009 um 07:47 Uhr von KFC Embryo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.03.2009, 19:13 Uhr
virtual
Sexiest Bit alive
(Operator)


Generell gilt ersteinmal, daß in einem Eventlistener nur "Billige" Operationen gemacht werden sollten: Die Eventlistener wird vom einm zentralen Thread der VM angesprochen, dh dem Thread der eben die ganze Application mit AWT/Swing events versorgt. Machst Du da nun irgendwelche teuren sachen, dann blockierst Du Deine Applikation.

Die Lösung sieht für gewöhnlich so aus, daß man in den Eventlistener (für teure Operationen) einen Thread (vorzugsweise ab JDK 5 einen Swingworker) erzeugt und darin die eigentliche Aufgabe hin delegiert.

Jetzt fragst Du vielleicht, was an einer DB-Connection teuer ist? - Ganz einfach: da steckt ein Remote-Aufruf hinter, der schon mal ziemlich lange Blocken kann, desweiteren natürlich auch die Initialisierung einer Connection selbst, welche ebenfalls recht länglich sein kann.

Desweiteren ist es bei dem obigen Ansatz in keiner Weise nachvollziehbar, warum Du für *jeden* tastendruck eine eigene Connection brauchst.


Bei Deiner Application würde ich mal vermuten, daß es vollkommen ausreicht, sich die Connection von außen in Deine Klasse reinreichen zu lassen (also außerhalb zu initialisieren, weil Du sie vielleicht noch woanders brauchen kannst). Im Constructor dann die Liste der Personen lesen und vormerken.
Dann ist dein Evenhandler wieder billig...


Dein JTable Problem müsstest Du noch mal detailierter erläutern...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.03.2009, 16:06 Uhr
KFC Embryo
Ein Huhn


Ok, das mit dem Datenbank initialisieren schaue ich mir nochmal an.

Nun zu dem JTable Problem:

Es gibt eine Tabelle in der, die in der DB gefundenen Namen aufgelistet werden.

z.B.
Ich gebe das Suchwort "tes" ein dann erscheint ein Eintrag "testfirma", in der Tabelle (keine Autovervollständigung)
Auf den Eintrag "testfirma" mache ich einen Doppelklick.
Der Name "testfirma" wird zurückgegeben und man kann ihn in einer String Variablen abspeichern.

Weißte wie ich das meine?
Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.03.2009, 10:14 Uhr
KFC Embryo
Ein Huhn


So ich habe mein Problem gelöst deswegen möchte ich es euch auch zeigen.


Code:
table.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent event){
                if(event.getClickCount() == 1){
                   int[] columns = table.getSelectedColumns();
                   int[] rows    = table.getSelectedRows();
                   for (int i = 0; i < columns.length; i++) {
                      for (int j = 0; j < rows.length; j++) {
                            int y =columns[i];
                            int x =rows[j];
                            stichwort =(String) table.getValueAt(x,y);
                            
                      }
                   }
                }
            }
        });



das einzige Problem das ich jetzt noch habe ist. Wie gebe ich den Wert mittels return zurück?

Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: