Swing Anfaengerproblem

Hein_nieH

Bekanntes Mitglied
Guten Abend,

ich bin absoluter Java-Neuling und benötige etwas Hilfe.
Für Übungszwecke habe ich ein kleines Programm geschrieben, das folgende Funktion hat
- ein Array wird via DefaultListModel an eine Liste übergeben
- Auf Knopfdruck "Remove First" soll das erste Element aus der Liste entfernt werden.

Mein Problem:
Ich habe eine Funktion Actionperformed.
Hier soll via listenModell.removeElementAt(0) das erste Element gelöscht werden. (Zeile 68)

Beim Compilieren kommt aber genau bei dieser Zeile die Meldung
"cannot find symbol"???:L
Das ist insofern verständlich da der Befehl listenModell.removeElementAt(0) in einer anderen Funktion steht und für den Compiler als lokal dargestellt wird.

Schreibe ich die Zeile listenModell.removeElementAt(0) in den Konstruktor funktioniert es, aber ebend nicht mehr auf Knopfdruck.

Meine Fragen:
Wie muss der code geändert werden, damit auf Knopfdruck der erste Listeneintrag aus der Liste entfernt wird.
Wie heisst der Befehl, damit das letzte Listenelement aus der Liste entfernt wird.;(

Java:
/* Listing Testswing.java */
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.io.File;

public class Testswing extends JFrame implements ActionListener
{	
	private static final String[] listen = {"Januar", "Februar", "März", 
											"April", "Mai", "Juni", "Juli",
											"August", "September", "Oktober",
											"Dezember"};
	
	public Testswing() //Konstruktor
	{
		super("Erste Tests mit Swing");
		//Grafik definieren und darstellen
		
		//Panels definieren
		JPanel centerPanel	=new JPanel();// mittleres Panel enthält Liste
		JPanel lowerPanel	=new JPanel();// unteres Panel enthält Buttons
		
		//Panels mit Elementen versehen
			
		//centerPanel
		DefaultListModel listenModell=new DefaultListModel(); //Interface zum Verwalten des Listeninhaltes
		for (int i=0; i<listen.length; i++)
		{	//Listenelemente Laden
			listenModell.addElement(listen[i]);
		}
				
		JList fileList=new JList(listenModell);
		JScrollPane scrollPane=new JScrollPane(fileList);
		centerPanel.add(scrollPane);
		
		//lowerPanel
		JButton remButton=new JButton("Remove First");
		remButton.addActionListener(this);
		lowerPanel.add(remButton);
		
		
		JButton exitButton=new JButton("Exit");
		exitButton.addActionListener(this);
		lowerPanel.add(exitButton);
		
		//Panels einfügen
		Container contentPane=getContentPane(); 
		contentPane.add(centerPanel, BorderLayout.CENTER);
		contentPane.add(lowerPanel, BorderLayout.SOUTH);

		//Windows Listener
		addWindowListener(new WindowClosingAdapter(true));
	}
	
	public void actionPerformed(ActionEvent event)	
	{
		String cmd=event.getActionCommand();
		if (cmd.equals("Exit"))
		{
			setVisible(false);
			dispose();
			System.exit(0);
		}// if
		
		if (cmd.equals("Remove Last"))
		{	
			listenModell.removeElementAt(0);//Erstes Element entfernen
		}//if
		
	}
	
	public static void main(String[] args)
	{
		Testswing frame=new Testswing();
		frame.setLocation(100,100);
		frame.pack();
		frame.setVisible(true);
	}//main
}//Class		
		
class WindowClosingAdapter extends WindowAdapter
{
	private boolean exitSystem;
	
	public WindowClosingAdapter(boolean exitSystem)
	{
		this.exitSystem=exitSystem;
	}
	
	public WindowClosingAdapter()
	{
		this(false);
	}
	
	public void windowClosingWindow(WindowEvent event)
	{
		event.getWindow().setVisible(false);
		event.getWindow().dispose();
		if (exitSystem)
		{	System.exit(0); }
	}//windowClosingWindow

}//class

Ich weiss, fuer einen Könner ist das kein Problem nur ich mache gerade die ersten Versuche.
Fuer einen Hinweis waere ich sehr dankbar.:)

Gruss Hein_nieH
 

jgh

Top Contributor
das einfachste ist es dann, die Variable
Code:
	DefaultListModel listenModell;
als Klassenvariable zu deklarieren:

Java:
public class Testswing extends JFrame implements ActionListener {
	private static final String[] listen = { "Januar", "Februar", "März",
			"April", "Mai", "Juni", "Juli", "August", "September", "Oktober",
			"Dezember" };
	DefaultListModel listenModell;

	public Testswing() // Konstruktor
	{
		super("Erste Tests mit Swing");
		// Grafik definieren und darstellen

und dann im Konstruktor zu initialisieren...wichtig keine neue Variable deklarieren:

[JAVA=15] public Testswing() // Konstruktor
{
super("Erste Tests mit Swing");
// Grafik definieren und darstellen

// Panels definieren
JPanel centerPanel = new JPanel();// mittleres Panel enthält Liste
JPanel lowerPanel = new JPanel();// unteres Panel enthält Buttons

// Panels mit Elementen versehen

// centerPanel
listenModell = new DefaultListModel(); // Interface zum Verwalten des
// Listeninhaltes
for (int i = 0; i < listen.length; i++) { // Listenelemente Laden
listenModell.addElement(listen);
}[/code]

[edit]das letzte löscht du, indem du auf die Länge des listenmodells -1 zugreifst
Java:
listenModell.remove(listenModell.size()-1);

allerdings musst du noch prüfen, ob immer noch Elemente vorhanden sind ;) , ansonsten fliegt dir eine Exception [/edit]
 
Zuletzt bearbeitet:

Neue Themen


Oben