Stapelung von Panels

DanielK

Mitglied
Hallo,

ich beschäftige mich momentan mit meinem ersten Java-Game.
Nachdem ich mich jetzt schon eine Weile mit der GUI rumplage, wende ich mich nun an das Forum.

Die Idee:
Es wird ein Startbildschirm angezeigt. Im Hintergrund befindet sich ein Bild, auf welchem verschiedene Komponenten dargestellt werden (Buttons, Labels...).
Zufällig soll in einem Rahmen von 10 Sekunden ein Stern in Form eines kleinen Ovals erscheinen und sich über das Bild bewegen. Dabei soll der Hintergrund weiterhin sichtbar sein.

Die Umsetzung:
Ich habe eine LayeredPane erzeugt, welche zwei Panels enthält.
1. das mainPanel (Hintergrundbild, Buttons etc.)
2. das SternPanel (der sich bewegende Stern)
Diese setzte ich auf einen Frame.


Das Ergebnis:
Am Anfang wird alles richtig angezeigt. Nachdem der Stern jedoch das erste mal das Bild durchläuft, verschwinden die beiden Buttons, welche sich in dem mainPanel befinden. Komischerweise bleiben sowohl das Hintergrundbild, als auch das Textfeld erhalten.

Weiterhin zeigt sich der Stern nicht als sich bewegender Punkt, sondern als Linie. Hier bräuchte ich wohl eine Art ClearScreen-Methode.

Wäre super, wenn ihr mir da weiterhelfen könntet, weil ich langsam wirklich verzweifle ;)

Hier ist der Code:

Java:
import javax.swing.*;

import java.util.ArrayList;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.imageio.ImageIO;
import java.io.File;
import java.awt.*;
import java.awt.event.*;




public class Asteroids {
	static final int FRAME_WIDTH = 800;
	static final int FRAME_HEIGHT=600;
	JFrame mainFrame=new JFrame("Asteroids - Danger from outer space");;
	JPanel mainPanel;
	JLayeredPane layer;
	Image background;
	Font bigFont = new Font("Arial",Font.ITALIC,20);
	Button newGameButton;
	Button highscoresButton;
	
public static void main (String[] args){
	Asteroids game = new Asteroids();
	game.getImages();
	game.startGUI();
}
public void startGUI(){
	
	GridBagLayout gbl = new GridBagLayout();
   
	Runnable starJob = new starMovement();
	Thread starThread = new Thread(starJob);
	
	starThread.start();
	
	layer = new JLayeredPane();
	layer.setBounds(0,0,FRAME_WIDTH,FRAME_HEIGHT);
	
	mainFrame.setResizable(false);
	mainFrame.setPreferredSize(new Dimension(FRAME_WIDTH,FRAME_HEIGHT));
	mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	mainFrame.pack();
	mainFrame.setVisible(true);
	
	JLabel textLabel = new JLabel ("Asteroids - Danger from outer Space");
	textLabel.setHorizontalAlignment(JLabel.CENTER);
	textLabel.setFont(bigFont);
	textLabel.setOpaque(true);
	textLabel.setForeground(new Color(255,255,255));
	textLabel.setBackground(new Color(0,0,0));

	newGameButton = new Button("Neues Spiel starten");
	newGameButton.setBackground(Color.DARK_GRAY);
	newGameButton.setForeground(Color.white);
	newGameButton.addActionListener(new newGameListener());
	
	highscoresButton = new Button ("Highscores");
	highscoresButton.setBackground(Color.darkGray);
	highscoresButton.setForeground(Color.white);
	highscoresButton.addActionListener(new highscoresListener());
	
	mainPanel = new JPanel();
	mainPanel.setLayout(gbl);
	mainPanel.setBounds(0,0,FRAME_WIDTH,FRAME_HEIGHT);
	
	starPanel s = new starPanel();
	s.setBounds(0,0,FRAME_WIDTH,FRAME_HEIGHT);
	s.setOpaque(false);
	
	addComponent(mainPanel,gbl,textLabel,0,0,1,1,0,10);
	addComponent(mainPanel,gbl,new JLabel(),0,1,1,1,0,50);
	addComponent(mainPanel,gbl,newGameButton,0,2,1,1,1,10);
	addComponent(mainPanel,gbl,highscoresButton,0,3,1,1,1,10);
	addComponent(mainPanel,gbl,(new JLabel(new ImageIcon(background))),0,0,0,0,0,0);
	
	mainFrame.add(BorderLayout.CENTER,layer);
	layer.add(mainPanel, new Integer(0),0);
	layer.add(s, new Integer(1),0);
	
	
	

}
public void getImages(){
	
	background = new ImageIcon (getClass().getResource("background.png")).getImage();
	/*Bild liegt in Resource-Ordner, welcher unter Properties der
	 * Klasse hinzugefügt wurde.
	 */
	}

public void startGame(){
	
}
public class newGameListener implements ActionListener{
	public void actionPerformed(ActionEvent e){
		System.out.println("Neues Spiel gestartet");
		startGame();
	}
	
}
public class highscoresListener implements ActionListener{
	public void actionPerformed(ActionEvent e){
		System.out.println("Highscores");
	}
}

static void addComponent( Container cont,
        GridBagLayout gbl,
        Component c,
        int x, int y,
        int width, int height,
        double weightx, double weighty )
{
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.NONE;
gbc.gridx = x; gbc.gridy = y;
gbc.gridwidth = width; gbc.gridheight = height;
gbc.weightx = weightx; gbc.weighty = weighty;
gbl.setConstraints( c, gbc );
cont.add( c );
}

public class starMovement implements Runnable{
	public void run(){
		
		while(true){
		System.out.println("Stern erscheint");
		mainFrame.repaint(); 
		/* alle panel-relevanten Methoden werden erneut durchlaufen
		 * --> paintStar wird erneut instanziiert!!!
		 */
		try{
		Thread.sleep((long) (Math.random()*10000));
		}catch(Exception ex){ex.printStackTrace();}
		}
	}
}
	


public class starPanel extends JPanel{
	/* wird paintStar instanziiert, wird automatisch die Methode 
	 * paintComponent aufgerufen.
	 */
public void paintComponent (Graphics g){
	System.out.println("test");
	g.setColor(new Color (255,255,255));
	for(int i = 0; i<FRAME_WIDTH;i++){
	g.fillOval(i,i, 2, 2);
	}
}
}
}
 
V

vanny

Gast
Zeichne es selbst von hinten nach vorn in ein BufferedImage und das zeichnest du dann einfach auf dein eines JPanel ... fertsch ohne Buttons weg und so.

Gruß Vanny
 

Marco13

Top Contributor
Ja, an dem Code ist jetzt nicht so viel "richtig", im klassischen Sinn ;)

Der Versuch, das mit so wenigen Änderungen wie möglich (!) in die Nähe von dem (!) zu bringen, was du willst, und betonend, dass das immernoch sehr häßlich ist und der Versuch, auf diese Weise auf ein "Asteroids-Spiel" hin zu arbeiten SEHR frustrierend sein wird:
Java:
import javax.swing.*;

import java.util.ArrayList;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.imageio.ImageIO;
import java.io.File;
import java.awt.*;
import java.awt.event.*;

public class Asteroids {
    static final int FRAME_WIDTH = 800;
    static final int FRAME_HEIGHT=600;
    JFrame mainFrame=new JFrame("Asteroids - Danger from outer space");;
    JPanel mainPanel;
    JLayeredPane layer;
    Image background;
    Font bigFont = new Font("Arial",Font.ITALIC,20);
    Button newGameButton;
    Button highscoresButton;

public static void main (String[] args){
    Asteroids game = new Asteroids();
    game.getImages();
    game.startGUI();
}
public void startGUI(){

    GridBagLayout gbl = new GridBagLayout();



    layer = new JLayeredPane();
    layer.setBounds(0,0,FRAME_WIDTH,FRAME_HEIGHT);


    JLabel textLabel = new JLabel ("Asteroids - Danger from outer Space");
    textLabel.setHorizontalAlignment(JLabel.CENTER);
    textLabel.setFont(bigFont);
    textLabel.setOpaque(true);
    textLabel.setForeground(new Color(255,255,255));
    textLabel.setBackground(new Color(0,0,0));

    newGameButton = new Button("Neues Spiel starten");
    newGameButton.setBackground(Color.DARK_GRAY);
    newGameButton.setForeground(Color.white);
    newGameButton.addActionListener(new newGameListener());

    highscoresButton = new Button ("Highscores");
    highscoresButton.setBackground(Color.darkGray);
    highscoresButton.setForeground(Color.white);
    highscoresButton.addActionListener(new highscoresListener());

    mainPanel = new JPanel();
    mainPanel.setLayout(gbl);
    mainPanel.setBounds(0,0,FRAME_WIDTH,FRAME_HEIGHT);

    starPanel s = new starPanel();
    s.setBounds(0,0,FRAME_WIDTH,FRAME_HEIGHT);
    s.setOpaque(false);

    addComponent(mainPanel,gbl,textLabel,0,0,1,1,0,10);
    addComponent(mainPanel,gbl,new JLabel(),0,1,1,1,0,50);
    addComponent(mainPanel,gbl,newGameButton,0,2,1,1,1,10);
    addComponent(mainPanel,gbl,highscoresButton,0,3,1,1,1,10);
    addComponent(mainPanel,gbl,(new JLabel(new ImageIcon(background))),0,0,0,0,0,0);

    mainFrame.add(BorderLayout.CENTER,layer);
    layer.add(mainPanel, new Integer(0),0);
    layer.add(s, new Integer(1),0);

    mainFrame.setResizable(false);
    mainFrame.setPreferredSize(new Dimension(FRAME_WIDTH,FRAME_HEIGHT));
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.pack();
    mainFrame.setVisible(true);


    Runnable starJob = new starMovement(s);
    Thread starThread = new Thread(starJob);
    starThread.start();


}
public void getImages(){

    background = new ImageIcon (getClass().getResource("image01.jpg")).getImage();
    /*Bild liegt in Resource-Ordner, welcher unter Properties der
     * Klasse hinzugefügt wurde.
     */
    }

public void startGame(){

}
public class newGameListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        System.out.println("Neues Spiel gestartet");
        startGame();
    }

}
public class highscoresListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        System.out.println("Highscores");
    }
}

static void addComponent( Container cont,
        GridBagLayout gbl,
        Component c,
        int x, int y,
        int width, int height,
        double weightx, double weighty )
{
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.NONE;
gbc.gridx = x; gbc.gridy = y;
gbc.gridwidth = width; gbc.gridheight = height;
gbc.weightx = weightx; gbc.weighty = weighty;
gbl.setConstraints( c, gbc );
cont.add( c );
}

public class starMovement implements Runnable{

    private starPanel starPanel;

    public starMovement(starPanel starPanel)
    {
        this.starPanel = starPanel;
    }

    public void run(){

        System.out.println("Stern erscheint");
        while(true){
            starPanel.move();
        /* alle panel-relevanten Methoden werden erneut durchlaufen
         * --> paintStar wird erneut instanziiert!!!
         */
        try{
        Thread.sleep((long) (50));
        }catch(Exception ex){ex.printStackTrace();}
        }
    }
}


public class starPanel extends JPanel{

    private Point position = new Point();

    public void move()
    {
        position.x += 1;
        position.y += 1;
        repaint();
    }
    /* wird paintStar instanziiert, wird automatisch die Methode
     * paintComponent aufgerufen.
     */
public void paintComponent (Graphics g){
    super.paintComponent(g);
    System.out.println("test");
    g.setColor(new Color (255,0,0));
    g.fillOval(position.x, position.y, 12, 12);
}
}
}
 

DanielK

Mitglied
Danke für die schnelle Antwort.
Leider funktioniert es mit deinen Änderungen immernoch nicht richtig. Das Problem bleibt das gleiche.
Zu deinen Aussagen über die Qualität des Codes: Wäre super, wenn du mir sagen könntest, was genau daran nicht richtig "im klassischen Sinn" ist. Stecke ja noch ziemlich am Anfang und könnte vllt davon für das restliche Game profitieren.

Gruß,
Daniel
 

Marco13

Top Contributor
Was genau funktioniert nicht? Wenn man das so direkt compiliert und startet, sollte sich der rote Punkt nach unten rechts bewegen (ohne irgendwelche "Spuren" zu hinterlassen oder so).

In bezug auf die Qualität könnte ich jetzt vieles wiederholen, was ich kürzlich in http://www.java-forum.org/java-basics-anfaenger-themen/139970-meinen-code-verbessern.html#post927828 geschrieben habe. Hast du dir mal sowas wie http://www.java-forum.org/spiele-multimedia-programmierung/54795-quaxli-2d-spiele-tutorial.html angesehen? Vielleicht auch noch elementarer, sowas wie Malen in Swing Teil 1: der grundlegende Mechanismus ? Byte-Welt Wiki oder eben die entsprechenden Seiten von Trail: Creating a GUI With JFC/Swing: Table of Contents (The Java™ Tutorials) , wie etwa Lesson: Performing Custom Painting (The Java™ Tutorials > Creating a GUI With JFC/Swing) oder auch Threads and Swing . Vielleicht wäre es auch gut, wenn du dir mal die Snippets angefangen bei http://www.java-forum.org/entwuerfe/113007-kein-swing-tutorial-2.html#post806478 ansehen würdest. (Die sollten NICHT als "Grundlage für ein Spiel" dienen oder so - aber du könntest sie einfach mal rauskopieren und starten, ansehen, vielleicht ein bißchen verändern und ein paar Ansätze davon, ggf. in abgewandelter Form, übernehmen...)
 

DanielK

Mitglied
Nunja, das tut er dann auch, aber die Buttons verschwinden immer noch.

Habe bis jetzt erstmal die Java-Grundlagen mit einem Buch der Head first-Reihe erarbeitet. Ich dachte mir, nach so viel Theorie würde mir mal etwas Praxis gut tun und wollte das dann direkt mit einem kleinen Projekt umsetzen. Dass der Code nicht perfekt ist, liegt wohl in der Natur der Sache...

Ich bin mir zwar nicht sicher, ob man sich zu Beginn eines neu zu erlernenden Themas direkt mit den Feinheiten auseinandersetzen sollte, werde mir aber mal die von dir genannten Tutorials anschauen. Vielen Dank erstmal für das kleine Kompendium. ;)
 

Marco13

Top Contributor
Natürlich sind die Prioritäten am Anfang andere. Aber wenn das zu einem "Asteroids" werden sollte, wäre das (wie angedeutet) schnell frustrierend geworden. Das muss ja auch nicht sein. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
I GUI, das verschiedene Panels hat (Von Seite zu Seite navigieren) AWT, Swing, JavaFX & SWT 7
G LayoutManager Panels anordnen über Schleifenvariablen AWT, Swing, JavaFX & SWT 7
B Bounds aller Panels aktualisieren AWT, Swing, JavaFX & SWT 0
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L Swing Panels bewegen wie Windows 10 Kacheln AWT, Swing, JavaFX & SWT 0
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
T Swing Bug: mehrfache Panels bei Mouseover? AWT, Swing, JavaFX & SWT 11
P Zwischen verschiedenen Panels wechseln AWT, Swing, JavaFX & SWT 3
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
K Event Handling Über JMenuBar die diversen Panels anzeigen AWT, Swing, JavaFX & SWT 10
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
R Swing panels nebeneinander mit BoxLayout.X_AXIS AWT, Swing, JavaFX & SWT 4
P Swing Panels Wechseln AWT, Swing, JavaFX & SWT 9
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
V AWT Panels überlappen AWT, Swing, JavaFX & SWT 1
K Panels mit eigenen Controllern in Main-View einbauen AWT, Swing, JavaFX & SWT 4
U Swing Panels im Contentpane durchschalten AWT, Swing, JavaFX & SWT 1
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
S Swing Plätze von 2 panels vertauschen AWT, Swing, JavaFX & SWT 4
T Panels mit Button verbinden AWT, Swing, JavaFX & SWT 3
F Swing Wie verwalte ich meine Panels richtig? AWT, Swing, JavaFX & SWT 2
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
V Swing MouseEvents bei gestapelten Panels AWT, Swing, JavaFX & SWT 2
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
kodela Teil eines Panels als Graphik speichern AWT, Swing, JavaFX & SWT 3
Kenan89 LayoutManager MigLayout Positionierung von Panels AWT, Swing, JavaFX & SWT 4
A Panels in JavaFX zur Laufzeit erzeugen AWT, Swing, JavaFX & SWT 5
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
F Panels über buttons zu anderen Panels hinzufügen AWT, Swing, JavaFX & SWT 2
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
J Problem mit der Höhe eines Panels AWT, Swing, JavaFX & SWT 11
M Swing JTabbedPane Panels deaktivieren AWT, Swing, JavaFX & SWT 2
S Swing (Nicht) Vergrößern von Panels AWT, Swing, JavaFX & SWT 3
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
B LayoutManager Zeilenweise Anordnung von Panels AWT, Swing, JavaFX & SWT 19
B Panels wechseln auf Knopfdruck AWT, Swing, JavaFX & SWT 17
N Hilfe bei Panels! AWT, Swing, JavaFX & SWT 11
J LayoutManager Panels übereinander AWT, Swing, JavaFX & SWT 3
P Von einem Panel auf die Objekte des anderen Panels zugreifen AWT, Swing, JavaFX & SWT 3
C Aufklappbare Panels AWT, Swing, JavaFX & SWT 2
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
D Vererbung von Panels AWT, Swing, JavaFX & SWT 8
E Wie Breite und Höhe eines Panels festlegen? AWT, Swing, JavaFX & SWT 5
B Panels stapeln, geht das? AWT, Swing, JavaFX & SWT 7
I 2 Panels übereinander, 1 transparent AWT, Swing, JavaFX & SWT 2
S GridBagLayout Panels AWT, Swing, JavaFX & SWT 2
W Panels vertikal anordnen AWT, Swing, JavaFX & SWT 10
R Swing Kommunikation zwischen Panels AWT, Swing, JavaFX & SWT 2
F Abschaltbare Panels AWT, Swing, JavaFX & SWT 5
aze Layout auf Teil eines Panels anwenden AWT, Swing, JavaFX & SWT 5
M Swing Alle Elemente eines Panels? AWT, Swing, JavaFX & SWT 9
I Swing Positionieren von Panels mit layoutManager AWT, Swing, JavaFX & SWT 6
B Java Grafiken an bestimmter Positon des Panels anzeigen AWT, Swing, JavaFX & SWT 6
S import von Klassen (zwei Panels eine Form) AWT, Swing, JavaFX & SWT 39
K Zwei Panels zentriert anordnen AWT, Swing, JavaFX & SWT 3
H2SO3- AWT seltsammes verhalten eines Panels AWT, Swing, JavaFX & SWT 9
S Buttons, Panels etc. zu einer Teilkomponente hinzufügen AWT, Swing, JavaFX & SWT 5
S mehere panels übereinander AWT, Swing, JavaFX & SWT 2
Z Swing Gif's in panels einfügen AWT, Swing, JavaFX & SWT 11
N Überschneidung von Panels umgehen AWT, Swing, JavaFX & SWT 3
D java.lang.IllegalArgumentException beim Darstellen eines Panels AWT, Swing, JavaFX & SWT 7
T Border eines Panels nicht an der rechten Kante anzeigen AWT, Swing, JavaFX & SWT 7
F name des panels in der ein button liegt rausfinden AWT, Swing, JavaFX & SWT 10
R AWT: Aufteilung mit Panels? AWT, Swing, JavaFX & SWT 2
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2
G Ein Frame mit mehreren austauschbaren Panels AWT, Swing, JavaFX & SWT 3
I Applet mit Panels (so richtig, gehts besser?) AWT, Swing, JavaFX & SWT 3
G designfrage zu 2 panels AWT, Swing, JavaFX & SWT 2
hdi zeitgleiches fokusieren von zwei panels AWT, Swing, JavaFX & SWT 2
G 2 Panels, 2 Listener, 1 Problem AWT, Swing, JavaFX & SWT 2
G Im applet auf panels zeichnen AWT, Swing, JavaFX & SWT 9
G Im Applet Panels anzeigen lassen AWT, Swing, JavaFX & SWT 2
G Editierbarkeit aller Komponenten eines Panels AWT, Swing, JavaFX & SWT 5
R Kleine Panels auf einem großen Panel frei platzieren AWT, Swing, JavaFX & SWT 11
G Remove Panels von JFrame AWT, Swing, JavaFX & SWT 5
M Ausrichtung eines Panels AWT, Swing, JavaFX & SWT 7
H Frames oder Panels für mehrere Ansichten? AWT, Swing, JavaFX & SWT 4
M Problem mit Cursor für Panels AWT, Swing, JavaFX & SWT 4
Kidao Mehrer Panels, mit Buttons in einem Frame abwechselnd laden? AWT, Swing, JavaFX & SWT 3
M Hallo Herr Uhres, Frage zu DND_Demo: Ausrichten der Panels:) AWT, Swing, JavaFX & SWT 4
O Panels ein und ausblenden - geht das? AWT, Swing, JavaFX & SWT 3
O eine Frage zu Panels AWT, Swing, JavaFX & SWT 10
M Problem bei Repaint von Panels AWT, Swing, JavaFX & SWT 2
M Größe des Panels ändern? AWT, Swing, JavaFX & SWT 3
O haben panels von anfang an einen dummen rand? AWT, Swing, JavaFX & SWT 19
G Zwischen Panels in einem JFrame wechseln AWT, Swing, JavaFX & SWT 4
M JTree und Anzeige des entsprechenden Panels AWT, Swing, JavaFX & SWT 5
M JList mit unbestimmter Anzahl Panels füllen AWT, Swing, JavaFX & SWT 4
K 2 Panels und Layouts AWT, Swing, JavaFX & SWT 2
K abstände zwischen Panels? AWT, Swing, JavaFX & SWT 3
U suchverfahren vergleich einbinden von panels ? in applet ;) AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben