List Listener

musterrrmax

Mitglied
Hallo!
Vielleicht kann mir hier jemand helfen, wieso mein ActionListener nicht funktioniert. Er wird irgendwie gar nicht ausgeführt. Danke schon mal im Voraus :)
Java:
private class MeinListSelectioner implements ListSelectionListener {
  @Override
  public void valueChanged(ListSelectionEvent e) {
   String s = oberfläche.getSelectedValue2();
   ListSelectionModel lsm = (ListSelectionModel) e.getSource();
   int firstIndex = e.getFirstIndex();
   int lastIndex = e.getLastIndex();
   if (lsm.isSelectionEmpty()) {

   } else {
    int minIndex = lsm.getMinSelectionIndex();
    int maxIndex = lsm.getMaxSelectionIndex();
    for (int i = minIndex; i <= maxIndex; i++) {
     if (lsm.isSelectedIndex(i)) {
      try {
       Runtime.getRuntime().exec("explorer.exe /select, C:\\EDD-Files" + s);
      } catch (IOException e1) {
       e1.printStackTrace();
      }
     }
    }
   }
 

mihe7

Top Contributor
Abgesehen davon solltest Du prüfen, ob der Wert noch geändert wird, d. h. am Anfang
Code:
if (e.getValueIsAdjusting()) {
    return;
}
einfügen.
 

Flown

Administrator
Mitarbeiter
Wow. Wie wärs mit:
Java:
ausgabe.addListSelectionListener(new MeinListSelectioner());
?
 

mihe7

Top Contributor
Wenn Du MeinListSelectioner verwenden willst, musst Du eine Instanz davon erzeugen. D. h. Du musst schon dafür sorgen, dass dies auch möglich ist. (Nachtrag: möglich = Zugriff auf die Instanz)
 

musterrrmax

Mitglied
Wenn Du MeinListSelectioner verwenden willst, musst Du eine Instanz davon erzeugen. D. h. Du musst schon dafür sorgen, dass dies auch möglich ist. (Nachtrag: möglich = Zugriff auf die Instanz)
Das ist mir schon klar, dass ich auf eine private Methode außerhalb der Klasse nicht zugreifen kann. Aber es reicht nicht, sie auf public zu setzen. Was müsste ich umändern?
 

Robat

Top Contributor
du verwendest eine JList, warum solltest du hier das SelectionModel bekommen?
An dieser Stelle sollte eine Exception fliegen.
Nein getSource() liefert in dem Moment das SelectionModel.

Das ist mir schon klar, dass ich auf eine private Methode außerhalb der Klasse nicht zugreifen kann. Aber es reicht nicht, sie auf public zu setzen.
Es geht auch nicht darum die Methode auf public zu setzen, sondern die innere Klasse, sodass du Zugriff auf diese Klasse bekommst
 

thet1983

Top Contributor
Wenn ich das nachbaue mit einer JList<String>
Java:
class MyListener implements ListSelectionListener {

        @Override
        public void valueChanged(ListSelectionEvent e) {
            if (e.getValueIsAdjusting())
                return;

            try{
                // FEHLER
                ListSelectionModel m = (ListSelectionModel)e.getSource();
            } catch (Exception e2) {
                System.err.println("Hier laufe ich in die: " + e2.getClass().getName());
            }


            JList<String> target = (JList<String>) e.getSource();
            ListSelectionModel m = target.getSelectionModel();
            String selected = target.getSelectedValue();
            System.out.println("Auswahl: " + selected);
        }
    }

dann laufe ich in eine ClassCastException
 

musterrrmax

Mitglied
Nein getSource() liefert in dem Moment das SelectionModel.


Es geht auch nicht darum die Methode auf public zu setzen, sondern die innere Klasse, sodass du Zugriff auf diese Klasse bekommst
Kannst du mir konkret sagen, wie ich das umsetzen kann? Ich hatte mit inneren Klassen noch nicht viel am Hut und habe es so gelernt. Das Problem hatte ich noch nie
 

mihe7

Top Contributor
Kannst du mir konkret sagen, wie ich das umsetzen kann?
public class ...
Um ein Objekt von einer nicht-statischen, inneren Klasse zu erstellen, musst Du über ein Objekt der äußeren Klasse gehen, z. B.
Java:
public class A {
    public class B implements ListSelectionListener {...}
}

A a = new A();
ListSelectionListener listener = a.new B();

Stell doch mal Deinen Code hier rein, dann kann man sich den Spaß mal ansehen.
 

musterrrmax

Mitglied
public class ...
Um ein Objekt von einer nicht-statischen, inneren Klasse zu erstellen, musst Du über ein Objekt der äußeren Klasse gehen, z. B.
Java:
public class A {
    public class B implements ListSelectionListener {...}
}

A a = new A();
ListSelectionListener listener = a.new B();

Stell doch mal Deinen Code hier rein, dann kann man sich den Spaß mal ansehen.
Also ich habe eine Controller Klasse, mit dem ActionListener
Java:
public class Controller implements ActionListener {
    //konstruktor
    @Override
    public void actionPerformed(ActionEvent e) {
         // anderer Code
   }
 
private class MeinListSelectioner implements ListSelectionListener {
  @Override
  public void valueChanged(ListSelectionEvent e) {
   String s = oberfläche.getSelectedValue2();
   ListSelectionModel lsm = (ListSelectionModel) e.getSource();
   int firstIndex = e.getFirstIndex();
   int lastIndex = e.getLastIndex();
   if (lsm.isSelectionEmpty()) {
  
   } else {
    int minIndex = lsm.getMinSelectionIndex();
    int maxIndex = lsm.getMaxSelectionIndex();
    for (int i = minIndex; i <= maxIndex; i++) {
     if (lsm.isSelectedIndex(i)) {
      try {
       Runtime.getRuntime().exec("explorer.exe /select, C:\\EDD-Files" + s);
      } catch (IOException e1) {
       e1.printStackTrace();
      }
     }
    }
   }
  }
 }
Und dann noch eine Panel Klasse, in der ich eine JList<String> eben mit diesem ActionListener versehen möchte
 

musterrrmax

Mitglied
Wenn es zu kompliziert ist, dann bestimmt nicht, weil Du MVC anwendest, sondern weil Dein Design nicht gut ist.
Naja schau. Wenn ich die Methode in eine neue Klasse haue, dann hab ich 2 Controller Klassen und kann somit nicht mehr auf die Methoden der Panel Klasse zugreifen weil ich kein zweites PanelObjekt initialisieren kann wie ich es in der Controller Klasse gemacht habe:
Java:
public class Controller implements ActionListener {
 private Oberfläche oberfläche; // Panel Klasse
 private Frameklasse frame;
 private Model model;

 public Controller() {
  oberfläche = new Oberfläche(this);
  frame = new Frameklasse("Test", oberfläche);
  model = new Model();
 }
}
 

musterrrmax

Mitglied
Wenn es zu kompliziert ist, dann bestimmt nicht, weil Du MVC anwendest, sondern weil Dein Design nicht gut ist.
So
Java:
ausgabe.[U]MeinListSelectioner[/U](controller.new MeinListSelectioner());
rufe ich die Methode (inzwischen public auf) aber es kommt bei ausgabe der Fehler:"The method MeinListSelectioner(Controller.MeinListSelectioner) is undefined for the type JList<String>" (ausgabe ist eine Jlist<String>)
 

mihe7

Top Contributor
Mit den Code-Schnipseln kann man leider wenig anfangen. Allgemein:
a) es gibt kaum einen Grund, die GUI-Klassen zu erweitern
b) Du kannst Objekte übergeben
c) Du kannst den Listener einer JList hinzufügen, dann bekommst Du diese als Quelle des Events.
 

mihe7

Top Contributor
Was schreibe ich dann in den Konstruktor der 2. Controller Klasse?
Wie soll ich Dir das sagen? Ich weiß ja nur, dass Du irgendwo eine JList (vermutlich) hast und einen ListSelectionListener hinzufügen willst. Außerdem, dass Du irgendeinen ActionListener hast.

Du könntest z. B.
Java:
public class MeinListSelectioner implements ListSelectionListener {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (e.getValueIsAdjusting()) {
           return;
        }
        JList list = (JList) e.getSource();
        ...
    }
}
schreiben und MeinListSelectioner der JList hinzufügen. Das muss nicht die beste Lösung sein, aber ohne genauere Infos kann man Dir halt auch keine genauere Antwort geben.
 

musterrrmax

Mitglied
Wie soll ich Dir das sagen? Ich weiß ja nur, dass Du irgendwo eine JList (vermutlich) hast und einen ListSelectionListener hinzufügen willst. Außerdem, dass Du irgendeinen ActionListener hast.

Du könntest z. B.
Java:
public class MeinListSelectioner implements ListSelectionListener {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (e.getValueIsAdjusting()) {
           return;
        }
        JList list = (JList) e.getSource();
        ...
    }
}
schreiben und MeinListSelectioner der JList hinzufügen. Das muss nicht die beste Lösung sein, aber ohne genauere Infos kann man Dir halt auch keine genauere Antwort geben.
Okay nochmal von neu, diesmal genaur.
Ich habe eine PanelKlasse, in der ich ein GUI erstelle. Auf dem Panel gibt es einen Button und eine JList<String>. Und in der PanelKlasse hab ich diese Methode
Java:
public String getSelectedValue2() {
   return ausgabe.getSelectedValue();
}
die schaut, welches der Elemente in der JList<String> (ein Attribut) angeklickt wurde. Diese Methode rufe ich in meiner ControllerKlasse mit oberfläche.getSelectedValue2(); auf, indem ich im Konstruktor der PanelKlasse ein Controller Objekt mitgebe
Java:
public Oberfläche(Controller controller) {
this.controller = controller;
und das im Konstruktor der ControllerKlasse mitgebe. Wenn ich aber jetzt die innere Klasse in eine neue Datei haue, hab ich dieses Panel Objekt nicht mehr im Konstrutor der neuen Klasse und kann nicht Panel.getSelectedValue2() machen. Und ich weiß nicht, wie ich diese Klassen miteinander verknüpfe. Und was in der Konstruktor kommt weiß ich auch nicht
 

mihe7

Top Contributor
MVC ist nichts anderes als Eingabe (C), Verarbeitung (M) und Ausgabe (V). Ein Listener übernimmt meist die Rolle des Controllers. Die GUI-Komponenten die Rolle der View und das Model musst Du zur Verfügung stellen. Bei MVC arbeitet man mit mehreren Models, Controllern und Views.

Wenn ich aber jetzt die innere Klasse in eine neue Datei haue, hab ich dieses Panel Objekt nicht mehr im Konstrutor der neuen Klasse und kann nicht Panel.getSelectedValue2() machen.
Wofür brauchst Du Panel, wenn Du die JList hast?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Obseved List mit ListView (Dateiliste) AWT, Swing, JavaFX & SWT 4
AmsananKING JavaFX Quiz cant fill List AWT, Swing, JavaFX & SWT 1
L Swing Wert vom Textfield in Array List hinzufügen AWT, Swing, JavaFX & SWT 2
Q-bert Doppelclick auf einem List item AWT, Swing, JavaFX & SWT 9
H Java FX List<AlbumsBean> in FXML TableView AWT, Swing, JavaFX & SWT 37
J private statische List - Datenbankverbindung AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
B Map, Set oder List in GUI ausgeben AWT, Swing, JavaFX & SWT 5
G AWT List AWT, Swing, JavaFX & SWT 4
yvesdaeschle List Control mit "card"-Ansicht AWT, Swing, JavaFX & SWT 7
S AWT AWT.List bug oder feature AWT, Swing, JavaFX & SWT 4
E Keine Ausgabe auf Console und List AWT, Swing, JavaFX & SWT 13
reibi SWT SWT - List - DeSelection Problem AWT, Swing, JavaFX & SWT 5
P Kennt awt.list keine Tastatureingabe? AWT, Swing, JavaFX & SWT 3
E werte aus List auslesen AWT, Swing, JavaFX & SWT 2
S JTree aus List<File> erstellen AWT, Swing, JavaFX & SWT 8
P List in JTextField ausgeben AWT, Swing, JavaFX & SWT 8
S AWT List: Items überschreiben? AWT, Swing, JavaFX & SWT 6
H SWT Zeilenumbruch in List AWT, Swing, JavaFX & SWT 9
M SWT keine Scrollbar bei widgets.List und GridLayout AWT, Swing, JavaFX & SWT 2
M List in JTree umwandeln AWT, Swing, JavaFX & SWT 10
L Swing JList - Warum Vector und nicht List ? AWT, Swing, JavaFX & SWT 4
P List-Einträge auslesen AWT, Swing, JavaFX & SWT 4
S List<String> in JTextArea! AWT, Swing, JavaFX & SWT 4
I List aus einer JList AWT, Swing, JavaFX & SWT 3
G Objekte in SWT List AWT, Swing, JavaFX & SWT 3
S List übertragen in Label? AWT, Swing, JavaFX & SWT 4
S List Elemente AWT, Swing, JavaFX & SWT 4
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2
B List, Item makieren per rechtsklick AWT, Swing, JavaFX & SWT 3
L Renderer mit nativen komponenten in tabelle / tree / list AWT, Swing, JavaFX & SWT 4
M Array List in JTree AWT, Swing, JavaFX & SWT 2
G Frage zur List mit chars AWT, Swing, JavaFX & SWT 7
C Menue verschwindet hinter AWT-List Box.wie beheben? AWT, Swing, JavaFX & SWT 3
S List mit mehrfarbiger Beschriftung AWT, Swing, JavaFX & SWT 2
G AWT: List mehrere Spalten. AWT, Swing, JavaFX & SWT 8
O java.awt.list - string ändern AWT, Swing, JavaFX & SWT 2
P Image und Text in einer List anzeigen AWT, Swing, JavaFX & SWT 12
I Farbe bei List und TextArea AWT, Swing, JavaFX & SWT 1
padde479 MenuItem MouseEvent/-Listener AWT, Swing, JavaFX & SWT 5
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
J Key-Listener in Java AWT, Swing, JavaFX & SWT 37
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
U Funktionsweise Listener AWT, Swing, JavaFX & SWT 1
L TextField Listener AWT, Swing, JavaFX & SWT 13
K Nullpointer Combobox Listener AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Salo JTabel Selection listener Bsp. AWT, Swing, JavaFX & SWT 5
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
J Action Listener Rückgabewert AWT, Swing, JavaFX & SWT 14
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
T Swing Methode in Listener aufrufen AWT, Swing, JavaFX & SWT 3
S Swing Tabellen - Listener & richtige Row AWT, Swing, JavaFX & SWT 3
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
S Erste Schritte mit GUI - Fileverarbeitung, Listener,... AWT, Swing, JavaFX & SWT 10
M JButton - Listener AWT, Swing, JavaFX & SWT 1
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
M Key Listener reagiert nicht AWT, Swing, JavaFX & SWT 4
F In Action Listener TextFields einlesen und prüfen. Abbruch bei falschen Eingaben. Wie mache ich das? AWT, Swing, JavaFX & SWT 2
M Listener funktioniert nicht AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
llabusch Event Handling Listener spielt verrückt AWT, Swing, JavaFX & SWT 8
kaoZ Swing Architektonisches Problem / Listener / MVC AWT, Swing, JavaFX & SWT 14
H org.eclipse.swt.widgets.Scale MouseRelease listener AWT, Swing, JavaFX & SWT 1
MaDDin-94 Swing Listener reagiert nicht immer AWT, Swing, JavaFX & SWT 2
A JLabel im Listener färben AWT, Swing, JavaFX & SWT 11
M Key-,... Listener funktioniert nicht immer AWT, Swing, JavaFX & SWT 2
P Event Handling Listener beim öffnen von einem JPopupMenu AWT, Swing, JavaFX & SWT 3
A Listener für JGTextField AWT, Swing, JavaFX & SWT 2
J Programmierstil: Kommunikation Listener und GUI AWT, Swing, JavaFX & SWT 3
B JTable Renderer / Listener AWT, Swing, JavaFX & SWT 7
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
E Listener AWT, Swing, JavaFX & SWT 3
M SWING Listener ohne Wirkung AWT, Swing, JavaFX & SWT 2
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
J Swing dragging listener AWT, Swing, JavaFX & SWT 5
H Problem mit dem Action listener.... AWT, Swing, JavaFX & SWT 2
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
M Fenster schließen - Listener AWT, Swing, JavaFX & SWT 5
G SWT TreeViewer - drop listener austauschen AWT, Swing, JavaFX & SWT 2
S Action Listener in innerer Klasse ausführen. AWT, Swing, JavaFX & SWT 8
J Sinn eines Selection Listener AWT, Swing, JavaFX & SWT 5
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
M comboBox Listener? AWT, Swing, JavaFX & SWT 2
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben