JList Suchfunktion

Status
Nicht offen für weitere Antworten.

sonq

Mitglied
Hallo liebe Leute,

ich bin seit kurzer Zeit wieder mit Java angefangen und versuche mich mit den Grundlagen auseinander zusetzen.
Also hab ich mir kurzerhand ein eigenes kleines Projekt überlegt und zwar folgendes:

Ich spiele nun schon seit einiger Zeit aktiv Diablo2 LoD und habe einiges an Items gesammelt
und auf verschiedenen Charakteren gespeichert.
Meine Idee bzw. mein kleines Projekt soll nun darin bestehen eine Art "Bibliothek" zu entwickeln,
in der ich meine Items, die Statistiken,die Anzahl und den Lagerplatz (sprich den Charakter) eintragen kann.
Soweit so gut.

Nun möchte ich später aber nicht die ganze Liste durchscrollen müssen um ein bestimmtes Item zu finden bzw.
zu merken dass ich dieses erst gar nicht besitze.
Daher möchte ich ganz gerne eine Suchfunktion einbauen.
Das Problem: Ich weiß nicht wie ich die Eingabe in das JTextField mit den Itemnamen in der Liste vergleichen soll
und dann, bei entsprechender Übereinstimmung, die Reihe markieren lasse.

Code folgt nun ... soweit bin ich bis jetzt gekommen.




Code:
/*DII-SuchOberfläche*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DIISearch2 extends JFrame implements ActionListener, TableData
{

 private JTextField nameField;
 
 public DIISearch2()
 {
  super("Die DII Item Bibliothek");
  addWindowListener(new WindowClosingAdapter(true));
  
  //Panel
  JPanel suchPanel = new JPanel();
  
   //Button
  JButton suchButton = new JButton("Suche");
  suchButton.addActionListener(this);
  
  //Label
  JLabel nameLabel = new JLabel("Name:");
  
  //Textfelder
  JTextField nameField = new JTextField(30);
  nameField.addActionListener(this);
  //Table
  JTable table = new JTable(DATA, COLHEADS);
  
  
  //such-panel
  suchPanel.add(nameLabel);
  suchPanel.add(nameField);
  suchPanel.add(suchButton);
  suchPanel.setBorder(BorderFactory.createEtchedBorder());
  
  //Layout
  getContentPane().add(suchPanel, BorderLayout.NORTH);
  getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
 }
 
 //Action Listener
  public void actionPerformed(ActionEvent event)
  {
    String name = nameField.getText();
	}
  
 public static void main(String[] args)
 {
  DIISearch2 wnd = new DIISearch2();
  wnd.setSize(300,200);
  wnd.setLocation(400,400);
  wnd.pack();
  wnd.setVisible(true);  
 }
}

*tableData denk ich mal brauch ich nicht zu posten, ist denk ich mal nicht relevant für die Problemlösung.

So hoffe man kann mir helfen und bedanke mich schon mal im Vorraus :)

greetz, sonq
 

Marco13

Top Contributor
Wenn du den Namen schon eingegeben hast und nurnoch suchen willst, kannst du durch den Inhalt der liste gehen
Code:
for (int i=0; i<list.getModel().getSize(); i++)
{
    Object element = list.getModel().getElementAt(i);
    if (element.equals(gesuchtesElement)) // bzw. element.toString().equalsIgnoreCase(eingabeTextField.getText())
    {
        list.setSelectedIndex(i);
        break;
    }
}

Wenn's ganz nifty sein soll, kann die Liste auch WÄHREND der Eingabe immer zum "am besten passenden Eintrag" springen - wäre etwas aufwändiger, aber halt irgendwie cool :cool: ein bißchen Inspiration dazu kannst du dir vielleicht unter
http://www.java2s.com/Code/Java/Swing-JFC/AutocompleteTextField.htm
holen...
 

sonq

Mitglied
Jo vielen dank erst mal das reicht mir für den anfang ... will mich ja auch erst einmal durch die Grundlagen arbeiten.

Das Programm soll nach und nach mehr Funktionen erhalten aber vielen Dank erstmal

hmmm... hab das mal nun so eingefügt
Code:
//Action Listener
  public void actionPerformed(ActionEvent event)
  {
    for (int i=0; i<table.getModel().getSize(); i++)
     {
    Object element = table.getModel().getElementAt(i);
    if (element.toString().equalsIgnoreCase(nameField.getText())) // bzw. element.toString().equalsIgnoreCase(eingabeTextField.getText())
    {
        table.setSelectedIndex(i);
        break;
    }
     } 
	}

bekomm aber immer folgende Fehlermeldung
Code:
C:\Programme\Java\jdk1.6.0_03\bin>javac DIISearch2.java
DIISearch2.java:49: cannot find symbol
symbol  : method getSize()
location: interface javax.swing.table.TableModel
    for (int i=0; i<table.getModel().getSize(); i++)
                                    ^
DIISearch2.java:51: cannot find symbol
symbol  : method getElementAt(int)
location: interface javax.swing.table.TableModel
    Object element = table.getModel().getElementAt(i);
                                     ^
DIISearch2.java:54: cannot find symbol
symbol  : method setSelectedIndex(int)
location: class javax.swing.JTable
        table.setSelectedIndex(i);

hängt das viell damit zusammen das ich nen JTable benutze und keine List??
 

Marco13

Top Contributor
Jo, dann nimmst du halt das TableModel statt des ListModels

getRowCount() statt getSize()
getValueAt(i, spalte) stat getElementAt(i)
setRowSelectionInterval(i,i) stat setSelectedIndex(i)
...
 

sonq

Mitglied
Hi,

Also erstmal vielen Dank für deine Bemühungen aber irgendwie funzt es immer noch net recht.
Bin ja noch nen tierischer Anfänger, hoffe von daher auf Verständnis ^^

Habs so eingefügt

Code:
//Action Listener
  public void actionPerformed(ActionEvent event)
  {
    for (int i=0; i<table.getModel().getRowCount(); i++)
     {
    Object element = table.getModel().getValueAt(i,i);
    if (element.toString().equalsIgnoreCase(nameField.getText()));
    {
        table.setRowSelectionInterval(i,i);
        break;
    }
     } 
	}

lässt sich alles compilieren nur die Funktion tut nicht.
Was hab ich falsch gemacht?
Helft mir auf die Sprünge am besten mit Codeschnipsel is immo noch einfacher fürs Verständnis
Danke vielmals :)
 

Marco13

Top Contributor
Och naja - "funzt net" ist halt nichts, worauf man antworten könnte. (Außer: Funzt DOCH...)
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DIISearch2 extends JFrame implements ActionListener
{

    private JTextField nameField;
    JTable table;

    public DIISearch2()
    {
        super("Die DII Item Bibliothek");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Panel
        JPanel suchPanel = new JPanel();

        //Button
        JButton suchButton = new JButton("Suche");
        suchButton.addActionListener(this);

        //Label
        JLabel nameLabel = new JLabel("Name:");

        //Textfelder
        nameField = new JTextField(30);
        nameField.addActionListener(this);
        //Table
        table = new JTable(new Object[][]
                                  {
                                  {"Cell00", "Cell01" },
                                  {"Cell10", "Cell11" },
                                  {"Cell20", "Cell21" },
                                  {"Cell30", "Cell31" }
        },
            new Object[]
            {"Header0", "Header1"});

        //such-panel
        suchPanel.add(nameLabel);
        suchPanel.add(nameField);
        suchPanel.add(suchButton);
        suchPanel.setBorder(BorderFactory.createEtchedBorder());

        //Layout
        getContentPane().add(suchPanel, BorderLayout.NORTH);
        getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
    }

//Action Listener
    public void actionPerformed(ActionEvent event)
    {
        table.getSelectionModel().clearSelection();
        String name = nameField.getText();
        for(int i = 0; i < table.getModel().getRowCount(); i++)
        {
            Object element = table.getModel().getValueAt(i, 0);
            if(element.toString().equalsIgnoreCase(nameField.getText()))
            {
                table.setRowSelectionInterval(i, i);
                break;
            }
        }
    }

    public static void main(String[] args)
    {
        DIISearch2 wnd = new DIISearch2();
        wnd.setSize(300, 200);
        wnd.setLocation(400, 400);
        wnd.pack();
        wnd.setVisible(true);
    }
}
 

sonq

Mitglied
Ok vielen Dank nochmal nun klappts.
Muss wohl daran gelegen haben das ich die Daten der Tabelle auserhalb gelagert hatte und die Strings nicht miteinander verglichen werden konnten....nja es klappt :) also danke nochmal
 

Marco13

Top Contributor
Viel "gravierender" war ein anderer Fehler (den du evtl. schon selbst erkann hast, wenn nicht, nchmal der Hinweis)
Code:
...
private JTextField nameField;

public DIISearch2()
{
....
  //Textfelder
  JTextField nameField = new JTextField(30); // Dieses TextField ist ein anderes als das, das oben deklariert wurde
  nameField.addActionListener(this); 
...
}


public void actionPerformed(ActionEvent event)
{
    String name = nameField.getText(); // Dieses TextField ist 'null', weil im Konstruktor ein anderes TextField erstellt wurde!
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JList, einzelne Strings hinzufügen AWT, Swing, JavaFX & SWT 9
B Jlist füllen AWT, Swing, JavaFX & SWT 4
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
J JList scrollen AWT, Swing, JavaFX & SWT 3
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
M Swing JList Auswahl-GUI-Konzept AWT, Swing, JavaFX & SWT 9
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
F JList aktualisiert nicht AWT, Swing, JavaFX & SWT 24
F JList auffüllen aus Array von Instanzen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
F JList bei Windowbuilder AWT, Swing, JavaFX & SWT 8
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
P JList erstellen AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
P Übergeben von ListModel an nichtparametrisierte JList AWT, Swing, JavaFX & SWT 8
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
T Swing WindowBuilder: JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
S JList repaint AWT, Swing, JavaFX & SWT 1
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
H JList AWT, Swing, JavaFX & SWT 5
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
S JList Index finden AWT, Swing, JavaFX & SWT 6
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
N JComponenten in JList oder doch anders? AWT, Swing, JavaFX & SWT 0
S Swing JList, ArrayList + DefaultModel AWT, Swing, JavaFX & SWT 5
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
M JList Model filtern AWT, Swing, JavaFX & SWT 4
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
P Swing JList mit Objekten - Name anzeigen AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
K Mehrfachselektierungen in einer JList AWT, Swing, JavaFX & SWT 6
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
S Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
E selektiertes Element aus JList zurückgeben AWT, Swing, JavaFX & SWT 7
E JList /DefaultListModel mit Datenbank verbinden AWT, Swing, JavaFX & SWT 10
L SQL & Jtable o. JList AWT, Swing, JavaFX & SWT 5
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
B JList -> Disabled AWT, Swing, JavaFX & SWT 6
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
I Jlist isselectionEmpty AWT, Swing, JavaFX & SWT 4
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
M JList mit 2-zeiligen Objekten füllen AWT, Swing, JavaFX & SWT 7
S JList mit Einträgen versehen schlägt fehl AWT, Swing, JavaFX & SWT 4
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
W JList valueChanges weiterleiten? AWT, Swing, JavaFX & SWT 14
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
E Jlist nur mit Klasse? AWT, Swing, JavaFX & SWT 5
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
T Wie ist das "Lookup-Verhalten" von JList, JCombobox änderbar? AWT, Swing, JavaFX & SWT 4
D JList items voneinander trennen AWT, Swing, JavaFX & SWT 10
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
M gleiches Element in JList mehrmals hintereinander auswählen AWT, Swing, JavaFX & SWT 6
T JList und Objekte AWT, Swing, JavaFX & SWT 7
M Swing JList Item in andere JList während Ausführung AWT, Swing, JavaFX & SWT 4
V JList filtern AWT, Swing, JavaFX & SWT 6
GianaSisters jList nur einmal ein Element anklicken AWT, Swing, JavaFX & SWT 3
TheWhiteShadow JList-Inhalt nach Änderung weg AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben