Swing Problem bei Erstellung von GUI für Routenplaner

Status
Nicht offen für weitere Antworten.

Elessari

Neues Mitglied
Hallo,

wir müssen für die Uni eine kleine Routenplanungsapplikation erstellen (Algorithmus etc sind schon fertig).
Und nun machen wir die ersten Schritte mit Java-Swing .
Grundsätzlich wissen wir, wie das mit den ActionListener'n etc. funktioniert, aber wir finden immer nur Tutorials, bei denen es sich dann nur um 1 Fenster dreht.
Wir brauchen aber etwas, wo man mit einem "Startbildschirm" beginnt, dann klickt man auf einen Startbutton und die Applikation wechselt auf die "Auswahlansicht", in der man Start und Ziel wählen kann. Und mit einem Klick auf den "Berechnen"-Button kommt man die Ausgabe angezeigt.

Es soll sich eben nicht alles, was es im dem Programm gibt, nur in einem Fenster befindet, sondern das Fenster soll dann immer sein Aussehen ändern.

Ich hoffe, es ist verständlich, was ich meine. Es war ein bisschen schwer zu beschreiben, wenn man die Swing-Fachbegriffe nicht kennt.

Kann uns jemand helfen?
 
Tutorial:
Ich verwende ein JPanel namens content, das das aktuell zu sehende Panel beinhaltet. In diesem Beipsiel sind das entweder Panel1 oder Panel2. Der Grund, warum ich die Panel in content und nicht direkt ins Frame setze ist ganz einfach: So funktionierts, anders nicht (Hat wahrscheinlich mit der internen Komponenten Struktur, der ContentPanel oder was weiss ich zu tun).
Panel1 und Panel2 können natürlich durch beliebige Panels ersetzt und erweitert werden. Soll ich noch mehr dazu sagen oder ist der Grundgedanke klar? Probierts mal aus 🙂

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Routenplaner extends JFrame {

	private JPanel pnl1, pnl2;
	private JPanel content;
	
	public Routenplaner() {
		super("Routenplaner");
		this.pnl1 = new Panel1();
		this.pnl2 = new Panel2();
		content = new JPanel(new BorderLayout());
		content.add(pnl1);
		add(content);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(300,200);
		setLocationRelativeTo(null);
	}
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				JFrame frame = new Routenplaner();
				frame.setVisible(true);
			}
		});
	}
	
	/**
	 * Setz ein neues Panel ins content Panel
	 */
	private void setPanel(JPanel pnl) {
		System.out.println(pnl);
		content.removeAll();
		content.add(pnl);
		content.revalidate();
		content.repaint();
	}
	
	class Panel1 extends JPanel {
		
		public Panel1() {
			setBackground(Color.RED);
			JButton btn = new JButton("Route wählen");
			btn.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					setPanel(pnl2);
				}
			});
			add(btn);
			add(new JButton("Programm Beenden"));
		}
	}
	
	class Panel2 extends JPanel {
		
		public Panel2() {
			setBackground(Color.BLUE);
			JButton btn = new JButton("Zurück");
			btn.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					setPanel(pnl1);
				}
			});
			add(btn);
			add(new JTextField("Start: ",24));
			add(new JTextField("Ziel: ",24));
		}
	}
}
 
Für wechselnde Fensterinhalte gibt es ein extra Layout, nämlich CardLayout. Eine Alternative wäre eine JTabbedPane, falls der Nutzer auch selbsttätig zwischen den Ansichen wechseln können soll (man kann aber auch Tabs deaktivieren, wenn sie nicht verfügbar sein sollen).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben