# JList wird nicht angezeigt



## kenix (25. Nov 2007)

Hallo zusammen!

Ich sitze hier gerade an einer kleinen Swing-GUI und habe ein Problem. Folgendes soll das Programm machen (relativ simpel eigentlich, aber es hängt gerad ein wenig): In einem Fenster (JFrame) gibt es drei Buttons und eine JList in die über die Buttons entweder werde gelöscht oder hinzugefügt werden sollen. Mein Problem ist jetzt, dass "meine" JList nicht angezeigt wird, obwohl mit 2 Default-Werten befüllt, was mache ich noch falsch?

Ach ja, hier der Code:


```
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class ListFrame extends JFrame implements ActionListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private JScrollPane scrollPane = null;
	private JList list = null;
	private ListModel listModel = null;	
	private JButton cmdAddEntry = null;
	private JButton cmdClearList = null;
	private JButton cmdDelEntry = null;
	
	public ListFrame() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			getContentPane().setLayout(null);
			
			Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
			setLocation( (d.width - getSize().width ) / 2, 
			               (d.height- getSize().height) / 2 );
						
			getContentPane().add(getScrollPane());
			getContentPane().add(getCmdAddEntry());
			getContentPane().add(getCmdDelEntry());
			getContentPane().add(getCmdClearList());			
			setSize(420, 300);
			setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private JList getList() {
		if(list == null) {
			list = new JList(getListModel());	
		    list.addListSelectionListener( new ListSelectionListener() { 
		        public void valueChanged( ListSelectionEvent e ) { 
		        	System.out.println(e);
		        }
		    });
		}
		return list;
	}
	
	
	private ListModel getListModel() {
		if(listModel == null) {
			listModel = new DefaultComboBoxModel(
					new String[] { "Item One", "Item Two" });
		}
		return listModel;
	}
	
	
	private JScrollPane getScrollPane() {
		if(scrollPane == null) {
			scrollPane = new JScrollPane(getList());
		}
		return scrollPane;
	}
	
	
	private JButton getCmdAddEntry() {
		if(cmdAddEntry == null) {
			cmdAddEntry = new JButton("Hinzufügen");
			cmdAddEntry.setBounds(10, 168, 120, 30);
			cmdAddEntry.addActionListener(this);
			
		}
		return cmdAddEntry;
	}
	
	private JButton getCmdDelEntry() {
		if(cmdDelEntry == null) {
			cmdDelEntry = new JButton("Entfernen");			
			cmdDelEntry.setBounds(140, 168, 120, 30);
			cmdDelEntry.addActionListener(this);
		}
		return cmdDelEntry;
	}

	
	private JButton getCmdClearList() {
		if(cmdClearList == null) {
			cmdClearList = new JButton("Liste leeren");
			cmdClearList.setBounds(270, 168, 120, 30);
		}		
		return cmdClearList;
	}
	
	
	@Override
	public void actionPerformed(ActionEvent e) {
		
	}

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

Danke schon mal im Voraus![/code]


----------



## Guest (25. Nov 2007)

Du setzt den Layoutmanager auf null, sagst aber nicht, wo die Liste bzw. das dazugehörige ScrollPane angezeigt werden soll.


----------



## Guest (25. Nov 2007)

Ersetze die initGUI Methode durch das hier
	
	
	
	





```
private void initGUI() { 
      try { 
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         setSize(420, 300);
         setLocationRelativeTo(null); // Zentriert anzeigen

         JPanel buttonPanel = new JPanel(new FlowLayout());
         buttonPanel.add(getCmdAddEntry());
         buttonPanel.add(getCmdDelEntry());
         buttonPanel.add(getCmdClearList());

         getContentPane().add(getScrollPane(), BorderLayout.CENTER);
         getContentPane().add(buttonPanel, BorderLayout.SOUTH);
          
         setVisible(true); 
      } 
      catch (Exception e) { 
         e.printStackTrace(); 
      } 
   }
```


----------



## kenix (26. Nov 2007)

Besten Dank, so funktioniert´s  :toll:


----------

