JFrame über einen JPanel

Reyny

Mitglied
Hallo liebe Javaraner,

mein Problem ist, dass ich eine ziemlich große Grafikoberfläche habe, auf der ich mit den Maustasten einen Punkt bewegen kann. Nun ist es aber mehr Grafikfläche vorhanden, als das Fenster anzeigen kann, deshalb soll der bewegte Punkt die ganze Zeit über zentriert im Fenster zu sehen sein.

Nun fehlt mir leider die Methode um dieses zu erreichen. Muss ich da vom JPanel oder vom JFrame her rangehen?
 

jgh

Top Contributor
evtl macht es Sinn, deine "ziemlich große Grafikoberfläche´" -welche ja hoffentlich ein JPanel ist (?!), in eine JScrollPane zu legen und dann entsprechend die Viewports auf deinen Punkt zu setzen.
 

Momolin

Aktives Mitglied
Hallo,

wenn Du die
Code:
paintComponent(Graphics g)
überschreibst, könntest Du beispielsweise den Hintergund der Grafikfläche mittels der
Code:
AffineTransfom
Klasse so transformieren, dass sich nur der Hintergrund verschiebt aber der Mittelpunkt eben in der Mitte bleibt:
Java:
@Override
	protected void paintComponent(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;

//Löschst den alten Hintergrund
		g2d.setPaint(Color.BLACK);
		g2d.fill(new Rectangle2D.Double(0, 0, this.getWidth(), this.getHeight()));

// das Objekt in der Mitte
		g2d.setPaint(Color.GREEN);
		g2d.fill(new Rectangle2D.Double(300 - 15.0, 240 - 15.0, 30.0, 30.0));

// Bewegen des "Hintergunds"
		transform = AffineTransform.getTranslateInstance(deltaX, 0);
		Rectangle2D.Double backGroundTop = new Rectangle2D.Double(10.0, 10.0,
				300.0, 30.0);
		Rectangle2D.Double backGroundBot = new Rectangle2D.Double(10.0, 400.0,
				300.0, 30.0);
// Zeichnen des Hintergrunds
		g2d.setPaint(Color.RED);
		g2d.fill(transform.createTransformedShape(backGroundTop));
		g2d.fill(transform.createTransformedShape(backGroundBot));
	}

oben zeichne ich ein grünes Rechteck immer in der Mitte der Zeichenfläche, wenn dann der Rest (2x rote Rechtecke) gezeichnet wird, transformiere ich die Formen um einen Faktor deltaX, der in einer Event-Methode verändert wird.
Hier das ganze Beispiel zum kopieren (ich habe halt einen KeyListener statt Mouse-Listener genommen, sollte aber egal sein):
Java:
package grafik;

import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;

import javax.swing.JPanel;

public class Canvas extends JPanel implements AWTEventListener {

	private double deltaX = 0.0;
	private AffineTransform transform;

	public Canvas() {
		setPreferredSize(new Dimension(600, 480));
		Toolkit.getDefaultToolkit().addAWTEventListener(this,
				AWTEvent.KEY_EVENT_MASK);
	}

	@Override
	protected void paintComponent(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;

		g2d.setPaint(Color.BLACK);
		g2d.fill(new Rectangle2D.Double(0, 0, this.getWidth(), this.getHeight()));
		g2d.setPaint(Color.GREEN);
		g2d.fill(new Rectangle2D.Double(300 - 15.0, 240 - 15.0, 30.0, 30.0));

		transform = AffineTransform.getTranslateInstance(deltaX, 0);

		Rectangle2D.Double backGroundTop = new Rectangle2D.Double(10.0, 10.0,
				300.0, 30.0);
		Rectangle2D.Double backGroundBot = new Rectangle2D.Double(10.0, 400.0,
				300.0, 30.0);

		g2d.setPaint(Color.RED);
		g2d.fill(transform.createTransformedShape(backGroundTop));
		g2d.fill(transform.createTransformedShape(backGroundBot));
	}

	@Override
	public void eventDispatched(AWTEvent arg0) {
		KeyEvent kEvent = (KeyEvent) arg0;
		if (kEvent.getKeyCode() == KeyEvent.VK_LEFT) {
			deltaX += 50;
		} else if (kEvent.getKeyCode() == KeyEvent.VK_RIGHT) {
			deltaX -= 50;
		}
		this.repaint();
	}

}

Viele Grüße
Momolin
 

Reyny

Mitglied
evtl macht es Sinn, deine "ziemlich große Grafikoberfläche´" -welche ja hoffentlich ein JPanel ist (?!), in eine JScrollPane zu legen und dann entsprechend die Viewports auf deinen Punkt zu setzen.

Ja! Das scheint genau das zu sein, was ich will.
Ich habe da jetzt auch grade STUNDENLANG herumprobiert, aber leider bleibt das JFrame einfach komplett grau sobald ich etwas mit JViewPort mache. :bahnhof:

Java:
                JScrollPane showMap = new JScrollPane(palette);
                JViewport View = new JViewport();
                Point point = new Point();
                point.setLocation(1, 1);
                View.setViewPosition(point);
                View.setSize(20*32, 15*32);
                showMap.setViewport(View);
                add(showMap);

palette ist mein Panel.

Wenn ich direkt add(palette); mache bekomme ich das Panel link oben festgebunden zu sehen.
Wenn ich add(showMap); mache, bekomme ich das selbe, nur dass ich unten einen Scrollbalken haben mit dem ich manuell in X-Richtung verschieben kann (schon mal ein Anfang). Aber sobald ich versuche irgendetwas mit "JViewPort" zu machen, wird einfach alles Grau im Frame (als ob nichts vorhanden wäre).

Welche Methode ist es denn genau, die ich brauche um das Frame einen bestimmten Ausschnitt des Panels anzeigen zu lassen? ???:L


Vielen Dank für weitere und bisherige Hilfe! :)
 

jgh

Top Contributor
hiermal ein möglicher Einsatz in einem KSKB. Das der Vieweport geändert wird erkennt man daran, dass sich das Scrollleisten nicht oben links befinden, sondern mehr oder weniger mittig.

Java:
import java.awt.Dimension;
import java.awt.Point;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JViewport;

public class ViewportExample extends JFrame {
	JPanel p;
	JScrollPane jsp;

	public static void main(String[] args) {
		new ViewportExample().setVisible(true);
	}

	public ViewportExample() {
		setSize(300, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		initAndAddComponents();
	}

	private void initAndAddComponents() {
		p = new JPanel();
		p.setPreferredSize(new Dimension(650, 650));
		jsp = new JScrollPane(p);
		add(jsp);
		JViewport jv = jsp.getViewport();
		jv.setViewPosition(new Point(250, 250));

	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
G DRUCKEN von z.B. eines JFrame über print(Graphics g) Java Basics - Anfänger-Themen 9
S JFrame über Browser Java Basics - Anfänger-Themen 7
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
E JFrame + Buffer-strategy Java Basics - Anfänger-Themen 8
I JFrame / Screen auf zweitem (definiertem) Monitor öffnen Java Basics - Anfänger-Themen 3
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
B HSQL mit JFrame steuern Java Basics - Anfänger-Themen 4
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
D Erste Schritte png in JFrame anzeigen? Java Basics - Anfänger-Themen 3
Thomathy Interface Wie schließt man ein anderes JFrame Fenster? Java Basics - Anfänger-Themen 6
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
S Kontrollieren ob jframe disposed ist Java Basics - Anfänger-Themen 3
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 17
M Bild in JFrame Java Basics - Anfänger-Themen 1
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S JFrame mit Hintergrundbild und Button Java Basics - Anfänger-Themen 4
S JFrame Java Basics - Anfänger-Themen 15
I JFrame proportional verkleinerbar machen Java Basics - Anfänger-Themen 3
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
T Auslagern von Methoden bei einem JFrame Java Basics - Anfänger-Themen 6
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
3 JFrame immer im Hintergrund Java Basics - Anfänger-Themen 1
F Interface JFrame mit if-Abfrage automatisch schließen lassen? Java Basics - Anfänger-Themen 3
R JFrame nicht verschiebbar Java Basics - Anfänger-Themen 2
T Wenn JFrame Textfelder Hintergrund Grün dann... (if) Java Basics - Anfänger-Themen 3
K Java JFrame mit Hintergrundbild erstellen Java Basics - Anfänger-Themen 1
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
H Eclipse JFrame Java Basics - Anfänger-Themen 3
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
I JFrame minimieren wenn anderes Programm minimiert wird Java Basics - Anfänger-Themen 1
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
D Erste Schritte JFrame Inhalte werden nicht angezeigt Java Basics - Anfänger-Themen 8
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
B Ist MyFrame oder JFrame besser? Java Basics - Anfänger-Themen 3
Y JFrame sichtbarkeit Java Basics - Anfänger-Themen 4
KeVoZ_ Label auf JFrame willkürlich Positionieren Java Basics - Anfänger-Themen 2
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
P JFrame nur einmal öffnen Java Basics - Anfänger-Themen 4
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
V Tastatur initialisieren JFrame Probleme Java Basics - Anfänger-Themen 6
J JPG in JFrame anzeigen lassen Java Basics - Anfänger-Themen 3
J JFrame ausgabe von Werten Java Basics - Anfänger-Themen 9
F GUI als Klasse oder extend JFrame? Java Basics - Anfänger-Themen 6
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
S Wieso wird mein JFrame transparent dargestellt? Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
thomasbomme Grafikfehler JFrame- Cleartype Java Basics - Anfänger-Themen 1
GreyFox Arbeit mit JFrame Java Basics - Anfänger-Themen 8
T Erste Schritte 2 Codes zusammen fügen / Label in JFrame Java Basics - Anfänger-Themen 1
Z Zwei Images auf einem JFrame - Aber nur eins wird angezeigt! Java Basics - Anfänger-Themen 5
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
W 2 JPanels in 2Klasse in einem JFrame zusammenfügen Java Basics - Anfänger-Themen 12
dat_vin JFrame öffnet sich mehrmals Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
M Rahmen für undekorierten JFrame Java Basics - Anfänger-Themen 6
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
B Erste Schritte JFrame in Klasse auslagern Java Basics - Anfänger-Themen 4
H JFrame komplett schließen Java Basics - Anfänger-Themen 3
S Brauche hilfe bei Pong (JFrame) Java Basics - Anfänger-Themen 2
M hintergrund in jframe festlegen Java Basics - Anfänger-Themen 4
J JFrame Render Fehler - Warum? Java Basics - Anfänger-Themen 2
I komponenten werden in JFrame nicht richtig angezeigt Java Basics - Anfänger-Themen 1
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
D Best Practice JFrame im JFrame Java Basics - Anfänger-Themen 2
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
S Erste Schritte Von JFrame in nächstes JFRame wechseln Java Basics - Anfänger-Themen 0
V JFrame aktualisieren Java Basics - Anfänger-Themen 6
S JFrame ist nicht schwarz Java Basics - Anfänger-Themen 5
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
S JFrame wird nicht "bemalt" Java Basics - Anfänger-Themen 2
M Unsichtbare Objekte in JFrame Java Basics - Anfänger-Themen 2
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
Sogomn JLabel in anderer Klasse zum JFrame hinzufügen Java Basics - Anfänger-Themen 2
B Drawline wird auf JFrame nicht angezeigt Java Basics - Anfänger-Themen 3
N Fokus setzen nachdem JFrame in Vordergrund geholt wurde Java Basics - Anfänger-Themen 7
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
S JFrame leeren Java Basics - Anfänger-Themen 6
X JFrame Fenster einzeln schließen Java Basics - Anfänger-Themen 2
J Klick auf Button -> JFrame öffnet sich erneut. & Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 7
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
P JFrame Component automatische Größe verhindern Java Basics - Anfänger-Themen 2
D JFrame, Komponenten verschmiert. Java Basics - Anfänger-Themen 15
M Schriftfarbe in JFrame Java Basics - Anfänger-Themen 24
A JFrame läuft ewig? Java Basics - Anfänger-Themen 2
U JFrame durch ActionListener erweitern Java Basics - Anfänger-Themen 4
B Wie kann man auf das JFrame einer anderen Klasse zugreifen, etwas hinzufügen und entfernen?? Java Basics - Anfänger-Themen 3
N JFrame-Objekt in neuer Methode nicht verfügbar? Java Basics - Anfänger-Themen 3
A Frage zu: JFrame setLocationRelativeTo Java Basics - Anfänger-Themen 3
N Erste Schritte Prozessor Kernanzahl in JFrame Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben