# Jlist, aktion auslösen



## bernd (22. Nov 2004)

Ich habe bisher Ereignisprotzeduren immer über Buttons ausgeführt!
Wie kann ich denn eine auslösen indem ich nur auf einen Eintrag in einer Jlist klicke?
 ???:L


----------



## Roar (22. Nov 2004)

Ein ListSelectionListener informiert dich üebr selektionen der liste:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JList.html#addListSelectionListener(javax.swing.event.ListSelectionListener)


----------



## foobar (22. Nov 2004)

ListSelectionListener


----------



## bernd (22. Nov 2004)

Also so in etwa!


```
l.addListSelectionListener( new ListSelectionListener() {
      public void valueChanged( ListSelectionEvent e ) {
        System.out.println( e );
```


----------



## bernd (22. Nov 2004)

```
Jlinamen.addListSelectionListener (new ListSelectionListener() {
      public void valueChanged( ListSelectionEvent e ) {
        System.out.println( e );

      }
    } );
```

Wenn ich das so benutze bekomme ich eine Fehlermeldung:
identifier expected

Das liegt ja meistens an einer "(" oder einem";" aber wo?
 ???:L


----------



## Reeb (22. Nov 2004)

Die Klammer in der letzten Zeile muss wieder in die erswte vor die geschweifte klammer


----------



## bernd (22. Nov 2004)

Reeb hat gesagt.:
			
		

> Die Klammer in der letzten Zeile muss wieder in die erswte vor die geschweifte klammer



Nö, geht leider auch nicht!  :?:


----------



## DesertFox (22. Nov 2004)

in dem fall ist doch e ein ListSelectionEvent, welches man nicht direkt in die Console ausgeben lassen kann. Man kann z.B toString() ,machen.


----------



## bernd (22. Nov 2004)

DesertFox hat gesagt.:
			
		

> in dem fall ist doch e ein ListSelectionEvent, welches man nicht direkt in die Console ausgeben lassen kann. Man kann z.B toString() ,machen.



Ich denke dann würde ich eine andere Fehlermeldung bekommen!


----------



## Roar (22. Nov 2004)

@df: und was ist mir println(Object o) ?


----------



## DesertFox (22. Nov 2004)

Roar hat gesagt.:
			
		

> @df: und was ist mir println(Object o) ?


shit, vergessen, aber bei mir gibt dein Code keine Fehler bernd, spuckt beim selektieren genau das was es soll z.B das 
javax.swing.event.ListSelectionEvent[ source=javax.swing.JList[,0,0,887x710,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,
minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,
selectionBackground=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],
selectionForeground=javax.swing.plaf.ColorUIResource[r=51,g=51,b=51],visibleRowCount=8,layoutOrientation=0] firstIndex= 0 lastIndex= 1 isAdjusting= false ]

_Editiert von Roar: zeilenumbrüche reingemachjt _ :x


----------



## bernd (22. Nov 2004)

DesertFox hat gesagt.:
			
		

> Roar hat gesagt.:
> 
> 
> 
> ...



Seltsam, ich bekomme nur ne Fehlermeldung!
 :x

_Roar: nochmal zeilenumbrüche :-/_


----------



## DesertFox (22. Nov 2004)

thats my testcode:

```
JFrame f = new JFrame();
JList Jlinamen;
f.getContentPane().add(Jlinamen = new JList(new String[] {"hallo", "tschüss"}));
Jlinamen.addListSelectionListener(new ListSelectionListener() {

public void valueChanged(ListSelectionEvent e) {
System.out.println(e);
}
});
f.pack();
f.setVisible(true);
```


----------



## bernd (22. Nov 2004)

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;


public class Datei1 {

  public static void main(final String[] args) {
        JFrame f = new JFrame();
    JList Jlinamen;
    f.getContentPane().add(Jlinamen = new JList(new String[] {"hallo", "tschüss"}));
    Jlinamen.addListSelectionListener(new ListSelectionListener() {

    public void valueChanged(ListSelectionEvent e) {
    System.out.println(e);
    }
    });
    f.pack();
    f.setVisible(true);
  }
}
```

So jetzt hab ich deinen Code mal übernonmmen und bekomme wieder ne Fehlermeldung!  :?:


----------



## DesertFox (22. Nov 2004)

du hast vergessen javax.swing.event.*; zu importieren. Bei mir gings, weil mir eclipse die imports automatisch managed


----------



## bernd (22. Nov 2004)

Aber ich Import doch
 javax.swing.*.
Da muss das doch mit drin sein oder?


----------



## DesertFox (22. Nov 2004)

javax.swing.* 
und javax.swing.event.* 
sind 2 total verschiedene pagages, wie z.B.
java.awt.*
und java.awt.event.*
, die importierst du ja auch einzeln


----------



## bernd (22. Nov 2004)

DesertFox hat gesagt.:
			
		

> javax.swing.*
> und javax.swing.event.*
> sind 2 total verschiedene pagages, wie z.B.
> java.awt.*
> ...



Meiner Meinung nach brauch ich die nicht einzelnt zu importieren!
(Hab ich noch nie gemacht!)

Aber selbst wenn ich javax.swing.event.*; importiere gehts nicht!
Ich Poste mal den kompletten Code, vieleicht liegt ja da der Hund begraben!


```
import mypackage.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung.
  *
  * @version 1.0 vom 15.11.2004
  * @author
  */

public class Abruf extends JFrame {
  // Anfang Variablen
    private JButton jbuneu = new JButton();
  private JButton jbubeenden = new JButton();
  static String zeile;
  static JList jlinamen = new JList();
  private JTextArea jtadata = new JTextArea("", 1, 1);
// Ende Variablen

  public Abruf(final String title) {
    // Frame-Initialisierung
    super("Datenausgabe");
    addWindowListener(new WindowAdapter() {
      public void windowClosing(final WindowEvent evt) { System.exit(0); } });
    setBounds(50, 40, 600, 400);
    Container cp = getContentPane();
    cp.setLayout(null);

    // Anfang Komponenten
        jbuneu.setText("neuer Eintrag");
        jbuneu.setBounds(5, 340, 110, 20);
    jbuneu.setToolTipText("öffnet die Dateneingabe");
    getContentPane().add(jbuneu);
    jbuneu.addActionListener(new ActionListener() {
      public void actionPerformed(final ActionEvent evt) {
        jbuneuActionPerformed(evt); } });

    jbubeenden.setText("beenden");
    jbubeenden.setBounds(470, 340, 110, 20);
    jbubeenden.setToolTipText("beendet das Programm");
    getContentPane().add(jbubeenden);
    jbubeenden.addActionListener(new ActionListener() {
      public void actionPerformed(final ActionEvent evt) {
        jbubeendenActionPerformed(evt); } });

    String[] jlinamenDaten = {};
    jlinamen.setBounds(5, 5, 150, 240);
    jlinamen.setSelectionMode(0);
    getContentPane().add(jlinamen);

    jtadata.setText("");
    jtadata.setBounds(170, 10, 400, 300);
    jtadata.setEditable(false);
    jtadata.setFont(new Font("MS Sans Serif", 1, 8));
    getContentPane().add(jtadata);
// Ende Komponenten

    setVisible(true);
  }

  // Anfang Ereignisprozeduren
    jlinamen.addListSelectionListener( new ListSelectionListener() {
      public void valueChanged( ListSelectionEvent e ) {
        System.out.println(e);
      }
     } );

    public void jbuneuActionPerformed(final ActionEvent evt) {
      Dateingabe d1 = new Dateingabe("Neue Adressen");
//      setVisible(false);
    }
  public void jbubeendenActionPerformed(final ActionEvent evt) {
       System.exit(0);
  }
// Ende Ereignisprozeduren

  public static void main(final String[] args) {
    new Abruf("Abruf");
        try {
        BufferedReader in = new BufferedReader(new FileReader("Adressen\\dat1.txt"));  // ließt die Datei aus
          ArrayList list = new ArrayList();

         while ((zeile = in.readLine()) != null) {
         int i = zeile.indexOf(";");
         list.add(zeile.substring(0, i));
            if(zeile.indexOf("") != -1) {
               jlinamen.setListData(list.toArray());
            }
         }
         in.close();
       }
       catch (Exception e) {
         System.err.println("Fehler bei Datei "+e.toString());
         System.exit(1);
       }
  }


}
```

In Zeile 69 soll der Fehler sein! ???:L


----------



## DesertFox (22. Nov 2004)

zu awt und awt.event: probiers!!

Zu Code: der Codeabschnitt:

```
// Anfang Ereignisprozeduren
    jlinamen.addListSelectionListener( new ListSelectionListener() {
      public void valueChanged( ListSelectionEvent e ) {
        System.out.println(e);
      }
     } );
```
 ist in keiner Methode, pack das noch dazu in den Konstruktor und setzte die endklammer des Konstruktors anstatt nach setVisible(true), sondern erst nach der Anonymen Klasse, oder noch besser: Setze die Anonyme Klasse vor setVisible(true)


----------



## bernd (22. Nov 2004)

Super hast recht jetzt funktionierts!
Dummer Fehler!!!!!!!!!!

Danke für die Hilfe, wär ich jetzt mit Sicherheit nicht drauf gekommen!
 :applaus:


----------



## Reeb (22. Nov 2004)

probiers mal damit, ich weis zwar nicht ob das sein muss, aber ich hab das in meinem Frame so gemacht
...

```
public class Datei1 extends JFrame implements WindowListener, ActionListener
[\code]
...

und du solltest die Methode von valueChanged außerhalb der Main schreiben.

hoffe das hilft dir was weiter

Edit: Layout
```


----------



## DesertFox (23. Nov 2004)

ach @roar + System.out.println(Object o): Ich erinnere mich wage, dass die Implementierung von println(Object o) so aussieht:

println(o.toString());

wodurch ich nur einen Methodenaufruf überspringe, und dadurch meine methode 0,000001 sekunden schneller ist als die: System.out.println(Object o), muahahahahaha  8) .


----------



## Roar (23. Nov 2004)

natürlich sieht sie so aus 
und deine paar nanosekunden die du durch einen methodenaufruf sparst kannste dir sonstwohin stecken :bae:


----------

