# Elemente einer JList ausgeben



## pawlo (2. Mai 2012)

Hallo,

habe ein Problem mit dem Ausgeben von JList Elementen.
Möchte also Elemente mit der Maus auswählen und durch ein Mausklick auf der Konsole ausgeben lassen.
Das Auswählen geht automatisch, mit der Ausgabe habe ich ein problem.

Hat jm einen Vorschlag?

Gruß, Pawel


```
public class ubers extends JFrame implements ActionListener
             {
              public JButton b;
              public JList li;
              public  JScrollPane scrollpane;
              public JList list;
              public ubers()
              {
              
    String categories[] = { "Household", "Office", "Extended Family",
        "Company (US)", "Company (World)", "Team", "Will",
        "Birthday Card List", "High School", "Country", "Continent",
        "Planet" };
          
                
               list =  new JList(categories);
               scrollpane = new JScrollPane(list);
               
               list.getSelectionModel().addListSelectionListener(null);
               
              // list.addMouseListener(null);
               
               getContentPane().add(scrollpane, BorderLayout.CENTER);
               setVisible(true);
                //list.addListSelectionListener( new ListSelectionListener());
    
  }
            public void mouseClicked(java.awt.event.MouseEvent e) {
               
            Object[] sel = list.getSelectedValues();
            for(int i=0; i<sel.length; i++)
                System.out.println(sel[i]);
            System.out.println();
                
}
```


----------



## vanny (2. Mai 2012)

.addListSelectionListener(null); ??

warum addest du keinListSelectionListener? macht ma wenig Sinn 

Den MouseListener benötigst du nicht, implementiere den ListSelectionListener und die valueChanged(); Methode, da führst du dann alles aus und fertsch.

Gruß Vanny
//edit:
O0 implements ActionListener ? was machst du da ?


----------



## Volvagia (2. Mai 2012)

Ich hab sogar mehrere Vorschläge:

1) Funktionelles: Mach eine geschweifte Klammer am Ende dazu, implementiere public void actionPerformed(ActionEvent), füge einen MouseListener zu der JList hinzu und entferne das Hinzufügen von 'null' zu den SelectionListeners. :autsch:

2) Designmäßiges: Benenne die Klasse so wie es sich gehört und benutz die Tabulatoren um Blöcke zu bilden, nicht damit der Code lustig aussieht. :autsch:²


@vanny: Ich mache das immer über MouseListeners und  benutzte SelectionListeners nur wenn z. B. ein Button enabled werden soll sobald eine Auswahl getroffen wurde. Ist wohl beides möglich.


----------



## pawlo (2. Mai 2012)

was muss statt null dann rein? mit this bekomme ich eine Fehlermeldung.


----------



## Volvagia (2. Mai 2012)

this funktioniert nur, falls "this" ein ListSelectionListener ist. (z. B. indem die Klasse das Interface implementierst.) Du kannst ihm auch anonym erzeugen, das ist mein favourisierter Weg, aber bei anonymen Klassen gehen die Meinungen teilweiße auseinander.


----------



## pawlo (2. Mai 2012)

ja ok, dann sieht der quellcode so aus. aber 
	
	
	
	





```
list.addMouseListener(null);
```
ist immer noch mit null, sonst Fehlermeldung.


```
public class ubers extends JFrame implements ActionListener
             {
              public JButton b;
              public JList li;
              public  JScrollPane scrollpane;
              public JList list;
              public ubers()
              {
              
    String categories[] = { "Household", "Office", "Extended Family",
        "Company (US)", "Company (World)", "Team", "Will",
        "Birthday Card List", "High School", "Country", "Continent",
        "Planet" };
          
                
               list =  new JList(categories);
               scrollpane = new JScrollPane(list);
               
              
               
               list.addMouseListener(null);
               
               getContentPane().add(scrollpane, BorderLayout.CENTER);
               setVisible(true);
                //list.addListSelectionListener( new ListSelectionListener());
    
  }
            public void mouseClicked(java.awt.event.MouseEvent e) {
               
            Object[] sel = list.getSelectedValues();
            for(int i=0; i<sel.length; i++)
                System.out.println(sel[i]);
            System.out.println();
                
}public void actionPerformed (ActionEvent e)
	{ 
             }
```


----------



## pawlo (2. Mai 2012)

oder sollte das ganze in der actionPerformed (ActionEvent e) Methode passieren?


----------



## Volvagia (2. Mai 2012)

Ich bezweifel, dass es eine Fehlermeldung gibt, wenn du nicht versuchst null als Listener hinzuzufügen. Nur einen "echten" Listener hast du immer noch nicht hinzugefügt, und du hast noch immer eine Klammer am Ende der Klasse zu wenig. In die ActionPerfomed schreibst du, was passieren soll, falls eine Action ausgelöst wird. Dazu brauchst du aber erst mals einen Komponenten, der mit Actions umgehen kann, z. B. JButton.


----------



## pawlo (2. Mai 2012)

es scheint so richtig zu sein was du gesagt hast. zumindest bewegt sich jetzt bei jeder auswahl der cursor auf der konsole nach unten. allerdings werden die einzelnen elemente nicht ausgegeben. vermute dass der fehler hier liegt, weiss aber selber nicht genau.

```
Object[] sel = list.getSelectedValues();
            for(int i=0; i<sel.length; i++)
              System.out.println(sel[i]);
            System.out.println();
```


----------



## vanny (2. Mai 2012)

```
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class TheJList extends JFrame{
	
	private String[] content = {"bli", "bla", "blubb", "foo"};
	private JList list;
	
	public TheJList(){
		
		super("Supi");
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		list = new JList(content);
			list.addListSelectionListener(new ListSelectionListener() {
				
				//das event wird bei mouseDown und mouseReleased und mit den CoursorTasten ausgelöst
				@Override
				public void valueChanged(ListSelectionEvent arg0) {
				System.out.println(content[list.getSelectedIndex()]);	
				}
			});
			
		this.add(list);
		this.pack();
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		
	}

	public static void main(String[] args) {
		new TheJList();
	}

}
```


----------



## Volvagia (2. Mai 2012)

Dann prüf mal, was "list.getSelectedValues();" zurückgibt.


----------



## pawlo (3. Mai 2012)

vielen dank, das funktioniert jetzt wie ich wollte


----------

