SelectionListener + repaint().Verständnisproblem ;)

Status
Nicht offen für weitere Antworten.

sagg

Mitglied
Abend zusammen,

ich bin gerade dabei, ein kleines Programm zu schreiben, mein Erstes, wohl bemerkt. ;)

Derzeit ist es so, dass man zwischen 5 verschiedenen Einträgen in einer JList auswählen kann, und sich je nach Auswahl der Inhalt von 2 JLabel's anpasst.
Nun soll sich aber auch noch ein drittes Label verändern, welches lediglich ein Bild enthält.

Hier erstmal der derzeitige Code.
Code:
	import java.awt.*;
	import javax.swing.*;
	import javax.swing.event.*;
	
	public class window extends JFrame {
		public static JLabel sysNameLabel, sysDescLabel, sysImgLabel;
		public static JList sysList;
	    public static int sysCurrent = 1;
		
		public static String[] names = {
	    		"sys 1",
	    		"sys 2",
	    		"sys 3",
	    		"sys 4",
	    		"sys 5"
		};
	    
		public static String[] descs = {
			"<html>Beschreibung 1
;)
Hier k&nnte jetzt ganz viel tolles Zeug stehen, 
was im Grunde genommen zwar erstunken und erlogen ist, aber da das sowieso 
niemand merkt und es im Endeffekt auch jedem einzelnen mehr als nur egal ist, werden
 wir wohl ein ganz kleines bischen &bertreiben. :)</html>",
			"Beschreibung 2",
			"Beschreibung 3",
			"Beschreibung 4",
			"Beschreibung 5"
		};
	    
		public static String[] prices = {
			"1000",
			"1100",
			"1200",
			"1300",
			"1400"
		};
	    
		public window() {
			setTitle("Gruppe 3  ;o)");
	        JTabbedPane jtp = new JTabbedPane();
	        getContentPane().add(jtp);
	        setSize( 400, 300 );
	        setResizable(false);
	
	        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
	        int w = getSize().width;
	        int h = getSize().height;
	        int x = ( dim.width - w ) / 2;
	        int y = ( dim.height - h ) / 2;
	        setLocation(x, y);
	
	        JPanel jp1 = new JPanel( );
	        jp1.setLayout( null );
	        
		    JLabel sysNameLabel = new JLabel( "", SwingConstants.LEFT );
		    sysNameLabel.setBounds( 5, 5, 200, 15 );
	        sysNameLabel.setText( names[0] );
	
	        JLabel sysDescLabel = new JLabel( descs[0], SwingConstants.LEFT );
			sysDescLabel.setBounds( 5, 25, 200, 280 );
			
			JLabel sysImgLabel = new JLabel( new ImageIcon( "i/"+sysCurrent+".jpg" ) );
			sysImgLabel.setBounds( 540, 200, 140, 150 );
			
			JList sysList = new JList( names );
			sysList.setFixedCellWidth( 140 );
		    sysList.addListSelectionListener( new selectionListener( ) );
			JScrollPane sysScrollPane = new JScrollPane( sysList );
			sysScrollPane.setBounds( 540, 5, 140, 200 );
	        
			jp1.add( sysScrollPane );
			jp1.add( sysNameLabel );
			jp1.add( sysDescLabel );
			jp1.add( sysImgLabel );
	        
	        jtp.addTab( "<html><u>Üebersicht</u></html>", jp1 );
	    }
	    
		public static void main(String[] args) {
	    	window tp = new window();
	    	tp.setSize( 700, 600 );
	    	tp.setLocationRelativeTo(null);
	    	tp.setResizable(false);
	    	tp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    	tp.setVisible(true);
	    }
	}
	
	final class selectionListener implements ListSelectionListener {
		public selectionListener( ) {
			super();
		}
		
		public void valueChanged (ListSelectionEvent e) {
			window.sysCurrent = window.sysList.getSelectedIndex();
			window.sysNameLabel.setText( ""+window.sysList.getSelectedValue() );
			window.sysDescLabel.setText( ""+window.descs[window.sysCurrent] );
			window.sysImgLabel.repaint();
		}
	}
Ich denke mal, da ist noch sehr viel verbesserungswürdig, oder?
Leider finde ich keine wirklich brauchbaren Seiten, die auch mal ein Beispiel zeigen, und nicht immer nur einen Einzeiler, mit dem ein Neuling nicht wirklich viel anfangen kann...

Wie dem auch sei, ich hatte mir das jetzt so gedacht, dass ich in "valueChanged" einfach einen repaint des sysImgLabel "rein werfe", nur wie kann ich von dort aus auf das ImageIcon zugreifen und es verändern, bzw. wie kann ich das "new ImageIcon" allgemein anders an das JLabel übergeben? Da hänge ich gerade fest..

Für Vorschläge, Tipps, Verbesserungen und/oder Links wäre ich euch sehr dankbar. ):

byebyez - sagg

*edit* Code mal eben korrigiert, da waren noch paar sinnfreie Fehler von meinem Geteste drinne.
 
S

SlaterB

Gast
label.setIcon()?

und mach deinen Code nicht schlechter als er ist,
vergleichsweise angenehm,
und bis auf die 4 Zeilen in valueChanged ist das meiste doch Standard-Initialisierung, da kann man nur wenig verbessern

toll wäre, den langen Text, der das ForumLayout zerstört, umzubrechen..
 

sagg

Mitglied
Argh, so einfach und ich bin zu Blind um daraf zu stoßen. Danke dir. :)

Beim letzten editieren hatte ich in der "valueChanged" u. a. die Zeile
Code:
window.sysCurrent = window.sysList.getSelectedIndex();
hinzugefügt und den Rest daran angepasst (und auch vergessen den Code umzubrechen), nun wirft mir diese aber eine "NullPointerException" entgegen..woran liegt das? Bzw. kann man diese "NullPointerException" auf eine "Art von Fehler" festlegen, dass man sozusagen gleich weiss wonach man schauen muss? Oder ist das eher eine Art "irgendwo ist ein Fehler"-Aussage?
 

sagg

Mitglied
Eben genau diese Zeile meckert er an, sprich im obigen Code Zeile 77.

*edit* Achso, was ich noch nirgends erwähnt habe: Dieser Fehler tritt erst auf, wenn man aus der JList einen Eintrag anklickt.

Aber der Vollständigheit zu liebe hier nochmal der derzeitige Code, obwohl sich da nicht viel geändert haben dürfte:
Code:
	import java.awt.*;
	import javax.swing.*;
	import javax.swing.event.*;
	import javax.swing.border.*;
	
	public class window extends JFrame {
		public static JLabel sysNameLabel, sysDescLabel, sysImgLabel;
		public static JList sysList;
	    public static int sysCurrent = 0;
		
		public static String[] names = {
	    		"sys 1",
	    		"sys 2",
	    		"sys 3",
	    		"sys 4",
	    		"sys 5"
		};
	    
		public static String[] descs = {
			"<html>Beschreibung 1
;)
Hier k&nnte jetzt ganz viel tolles Zeug stehen, was im Grunde 
genommen zwar erstunken und erlogen ist, aber da das sowieso niemand
 merkt und es im Endeffekt auch jedem einzelnen mehr als nur egal ist, 
werden wir wohl ein ganz kleines bischen &bertreiben. :)</html>",
			"Beschreibung 2",
			"Beschreibung 3",
			"Beschreibung 4",
			"Beschreibung 5"
		};
	    
		public static String[] prices = {
			"1000",
			"1100",
			"1200",
			"1300",
			"1400"
		};
	    
		public window() {
			setTitle("Gruppe 3  ;o)");
	        JTabbedPane jtp = new JTabbedPane( );
	        getContentPane( ).add( jtp );
	        setSize( 400, 300 );
	        setResizable( false );
	
	        Dimension dim = Toolkit.getDefaultToolkit( ).getScreenSize( );
	        int w = getSize( ).width;
	        int h = getSize( ).height;
	        int x = ( dim.width - w ) / 2;
	        int y = ( dim.height - h ) / 2;
	        setLocation( x, y );
	
	        JPanel jp1 = new JPanel( );
	        jp1.setLayout( null );
	        
		    JLabel sysNameLabel = new JLabel( "", SwingConstants.LEFT );
		    sysNameLabel.setBounds( 5, 5, 200, 15 );
	        sysNameLabel.setText( names[0] );
	
	        JLabel sysDescLabel = new JLabel( descs[0], SwingConstants.LEFT );
			sysDescLabel.setBounds( 5, 25, 200, 280 );
			
			JLabel sysImgLabel = new JLabel( );
			sysImgLabel.setBounds( 540, 200, 140, 150 );
			sysImgLabel.setIcon( new ImageIcon( "i/"+sysCurrent+".jpg" ) );
			
			JList sysList = new JList( names );
			sysList.setFixedCellWidth( 140 );
			sysList.setSelectedIndex( 0 );
		    sysList.addListSelectionListener( new selectionListener( ) );
			JScrollPane sysScrollPane = new JScrollPane( sysList );
			sysScrollPane.setBounds( 540, 5, 140, 200 );
	        
			jp1.add( sysScrollPane );
			jp1.add( sysNameLabel );
			jp1.add( sysDescLabel );
			jp1.add( sysImgLabel );
	        jtp.addTab( "<html>Üebersicht</html>", jp1 );
		}
	    
		public static void main( String[] args ) {
	    	window tp = new window( );
	    	tp.setSize( 700, 600 );
	    	tp.setLocationRelativeTo( null );
	    	tp.setResizable( false );
	    	tp.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	    	tp.setVisible( true );
	    }
	}
	
	final class selectionListener implements ListSelectionListener {
		public selectionListener( ) {
			super( );
		}
		
		public void valueChanged ( ListSelectionEvent e ) {
			window.sysCurrent = window.sysList.getSelectedIndex( );
			window.sysNameLabel.setText( ""+window.sysList.getSelectedValue( ) );
			window.sysDescLabel.setText( ""+window.descs[window.sysCurrent] );
			window.sysImgLabel.setIcon( new ImageIcon( "i/"+window.sysCurrent+".jpg" ) );
		}
	}

Und die dazugehörige Fehlermeldung:
Code:
java.lang.NullPointerException
        at selectionListener.valueChanged(window.java:93)
        at javax.swing.JList.fireSelectionValueChanged(JList.java:1321)
        at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1335)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:187)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:214)
        at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:402)
        at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:411)
        at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:435)
        at javax.swing.JList.setSelectionInterval(JList.java:1608)
        at javax.swing.plaf.basic.BasicListUI$MouseInputHandler.adjustFocusAndSelection(BasicListUI.java:1341)
        at javax.swing.plaf.basic.BasicListUI$MouseInputHandler.mousePressed(BasicListUI.java:1295)
        at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:222)
        at java.awt.Component.processMouseEvent(Component.java:5097)
        at java.awt.Component.processEvent(Component.java:4897)
        at java.awt.Container.processEvent(Container.java:1569)
        at java.awt.Component.dispatchEventImpl(Component.java:3615)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3195)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
        at java.awt.Container.dispatchEventImpl(Container.java:1613)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:480)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
java.lang.NullPointerException
        at selectionListener.valueChanged(window.java:93)
        at javax.swing.JList.fireSelectionValueChanged(JList.java:1321)
        at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1335)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:187)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:157)
        at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(DefaultListSelectionModel.java:554)
        at javax.swing.JList.setValueIsAdjusting(JList.java:1675)
        at javax.swing.plaf.basic.BasicListUI$MouseInputHandler.mouseReleased(BasicListUI.java:1379)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:232)
        at java.awt.Component.processMouseEvent(Component.java:5100)
        at java.awt.Component.processEvent(Component.java:4897)
        at java.awt.Container.processEvent(Container.java:1569)
        at java.awt.Component.dispatchEventImpl(Component.java:3615)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
        at java.awt.Container.dispatchEventImpl(Container.java:1613)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:480)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
 
S

SlaterB

Gast
du erzeugst im Konstruktor mit
JList sysList = new JList( names ) ;
eine lokale Variable,
während die Exemplarvariable null bleibt

->
schreibe
sysList = new JList( names ) ;
statt
JList sysList = new JList( names ) ;
 

sagg

Mitglied
Tatsächlich, ohne dem Kram davor funktioniert es super. :)
Aber im Nachhinein ist es auch logisch, da es ja direkt nach dem Anfang der Klasse schon als JList definiert wird und ich es dann einfach nochmal überschreibe...ja ja, die kleinen Fehlerchen, die sich beim Zusammenbasteln von Codeschnippseln und der fehlenden Erfahrung so einschleichen. ;)

Nochmals Danke, da das nun funktioniert kann ich mich jetzt an Input-Felder und solchen Spässen versuchen. *schauder*
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
G JTable: SelectionListener Problem Java Basics - Anfänger-Themen 2
M SelectionListener bei zwei Tabellen Java Basics - Anfänger-Themen 3
S selectionListener bringt NullPointerException Java Basics - Anfänger-Themen 2
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
S Repaint() Java Basics - Anfänger-Themen 1
J Erste Schritte Mit repaint() ist Label nicht sichtbar Java Basics - Anfänger-Themen 15
S Repaint() in der Schleife funktioniert nicht immer Java Basics - Anfänger-Themen 5
H Graphics / repaint Java Basics - Anfänger-Themen 8
D Verhindern das repaint beim vergrößern aufgerufen wird Java Basics - Anfänger-Themen 9
M Liste mit repaint aktualisieren Java Basics - Anfänger-Themen 1
E Probleme mit repaint() Java Basics - Anfänger-Themen 15
K Erkennt repaint nicht Java Basics - Anfänger-Themen 1
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
G Problem mit repaint() Java Basics - Anfänger-Themen 2
J repaint() geht gar nicht; GUI aktualisieren Java Basics - Anfänger-Themen 10
J paint() vs repaint() Java Basics - Anfänger-Themen 3
C repaint wird nicht während Druck auf Maustaste ausgeführt. Java Basics - Anfänger-Themen 4
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
P [JTable] Problem mit repaint() Java Basics - Anfänger-Themen 2
P Interpreter-Fehler Im for loop funkzioniert repaint nicht :( Java Basics - Anfänger-Themen 4
M repaint() in run-Methode funktioniert nicht Java Basics - Anfänger-Themen 9
O Probleme mit der repaint-Funktion Java Basics - Anfänger-Themen 6
W repaint() ruft paint() nicht auf Java Basics - Anfänger-Themen 9
J repaint() funktioniert nicht wie gewünscht Java Basics - Anfänger-Themen 30
I Hangman CardLayout/repaint? Java Basics - Anfänger-Themen 2
H Variablen Probleme mit repaint() Java Basics - Anfänger-Themen 2
Y im applet malen ohne repaint paint ? Java Basics - Anfänger-Themen 6
J repaint(); launisch ? Java Basics - Anfänger-Themen 3
E Altes Bild bei repaint() löschen? Java Basics - Anfänger-Themen 10
Z Wie repaint() bei Uhr realisieren? Java Basics - Anfänger-Themen 12
N JScrollPane repaint(); geht nicht Java Basics - Anfänger-Themen 4
I repaint bei jpanel Java Basics - Anfänger-Themen 10
T repaint wir nicht mehr geöffnet! Java Basics - Anfänger-Themen 38
T Canvas aktualisierung mit repaint Java Basics - Anfänger-Themen 5
C GUI aktualisieren: repaint, validate, Fenstergröße ändern bringt nichts Java Basics - Anfänger-Themen 13
Antoras Swing repaint und Nullpointer Java Basics - Anfänger-Themen 6
O repaint() wird nicht ausgeführt Java Basics - Anfänger-Themen 3
S problem mit repaint() in Thread Java Basics - Anfänger-Themen 6
Antoras swing und repaint-Ersatz Java Basics - Anfänger-Themen 8
G Automatischer repaint bei Swing so wie bei AWT? Java Basics - Anfänger-Themen 7
M Problem mit repaint Java Basics - Anfänger-Themen 2
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
T repaint einer komponente Java Basics - Anfänger-Themen 2
E repaint() aufrufen Java Basics - Anfänger-Themen 12
F paintComponent mit repaint() aufrufen Java Basics - Anfänger-Themen 27
kulturfenster Probleme mit repaint() Java Basics - Anfänger-Themen 2
K Repaint() in Methode Java Basics - Anfänger-Themen 13
G Frage zu repaint() Java Basics - Anfänger-Themen 5
D JPanel repaint() wird nicht gemacht! Java Basics - Anfänger-Themen 7
B Problem mit repaint() Java Basics - Anfänger-Themen 8
V Reihenfolge von Befehlen - hier repaint() zu spät Java Basics - Anfänger-Themen 13
G repaint in paint aufrufen? Java Basics - Anfänger-Themen 9
F repaint() - Methode verzögern lassen? Java Basics - Anfänger-Themen 3
I Erst repaint() dann zeichnen? Java Basics - Anfänger-Themen 6
D von paint() und repaint() im Applet Java Basics - Anfänger-Themen 4
J probleme mit repaint Java Basics - Anfänger-Themen 2
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
X Verständnisproblem Call-By-Reference Java Basics - Anfänger-Themen 5
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Verständnisproblem mit Assoziationen Java Basics - Anfänger-Themen 7
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
A Erste Schritte Verständnisproblem Java Basics - Anfänger-Themen 5
S Verständnisproblem Aufgabe Java Basics - Anfänger-Themen 9
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
2 Verständnisproblem bei Anwendung von Lower Bounded Wildcards Java Basics - Anfänger-Themen 5
V Verständnisproblem Java Basics - Anfänger-Themen 22
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
J Verständnisproblem einer Methode Java Basics - Anfänger-Themen 20
M Konstruktur - Verständnisproblem Java Basics - Anfänger-Themen 4
C Postinkrement und println - Verständnisproblem Java Basics - Anfänger-Themen 8
T Verständnisproblem beim Vigenere-Verfahren Java Basics - Anfänger-Themen 2
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
N Verständnisproblem InsertionSort. Java Basics - Anfänger-Themen 2
D Verständnisproblem Java Basics - Anfänger-Themen 2
B VerständnisProblem mit Beispielaufgabe aus Buch Java Basics - Anfänger-Themen 1
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
S Verständnisproblem bei Interfaces Java Basics - Anfänger-Themen 6
V Verständnisproblem Java Basics - Anfänger-Themen 5
V Arrays-verständnisproblem Java Basics - Anfänger-Themen 4
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
S Verständnisproblem einer Übungsaufgabe Java Basics - Anfänger-Themen 6
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
P Verständnisproblem main Methode Java Basics - Anfänger-Themen 9
S Klassen Verständnisproblem Konstruktor Java Basics - Anfänger-Themen 7
I e.getMessage(); - Verständnisproblem Java Basics - Anfänger-Themen 6
lesni Vererbung Vererbung - Verständnisproblem Java Basics - Anfänger-Themen 2
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
J Verständnisproblem Methoden-Kettung Java Basics - Anfänger-Themen 3
A Vererbung Verständnisproblem bei Übung Java Basics - Anfänger-Themen 5
E Verständnisproblem Typkonvertierung Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben