externer repaint Aufruf

Hallo,

ich muss für mein Bachelorarbeit eine Programm schreiben, mit dem ich Diagramme zeichnen und bearbeiten kann.

Dazu erzeuge ich ein JPanel, dass als Zeichenoberfläche dient. Auf dieses füge ich nun dynamisch JInternalFrames hinzu ( keine PaintComponenten! ). Diese sollen nun mittels drawLine() untereinander verbunden werden.

Das Problem ist, dass jedesmal wenn ich ein JInternalFrame verschiebe, die Verbindung nicht neu gezeichnet wird, da ich kein repaint() der Zeichenoberfläche aus dem JInternalFrame Object aufrufen kann.
Gibt es eine geschickte Möglichkeit ein repaint() in der Zeichenoberfläche aufzurufen, wenn das JInternalFrame bewegt wird?

Vielen Dank im Vorraus
 

Michael...

Top Contributor
Gibt es eine geschickte Möglichkeit ein repaint() in der Zeichenoberfläche aufzurufen, wenn das JInternalFrame bewegt wird?
Listener am JInternalFrame? Reagiert allerdings erst nach der Verschiebung.

Evlt. könnte man auch mit einem Renderer/Editor Konzept arbeiten, das heißt keine "echten" JInternalFrames verbauen, sondern nur ein Abbild zeichen. Erst wenn etwas im JInternalFrame angepasst, eingegeben... werden muss ein echtes JInternalFrame anzeigen.
Dann könnte man auch einfach mit einem Mouse/MouseMotionListener auf der Zeichenoberfläche arbeiten.
 
Danke für die schnell Antwort!

In meinen ersten Ansatz habe ich es mit einem Abbild versucht. Da aber für das spätere Programm noch Zugriffe auf interne Componenten des JInternalFrames erfolgen sollen, habe ich diesen Ansatz verworfen. ( Geht unter anderen darum Elemente in eine JList hinzuzufügen )

Listener am JInternalFrame?
Meinst du damit, sowas wie ein PropertyChangeListener?
 

Michael...

Top Contributor
Da aber für das spätere Programm noch Zugriffe auf interne Componenten des JInternalFrames erfolgen sollen, habe ich diesen Ansatz verworfen. ( Geht unter anderen darum Elemente in eine JList hinzuzufügen )
Deswegen der Editor.
Meinst du damit, sowas wie ein PropertyChangeListener?
Evtl. geht es auch damit. Dachte ursprünglichen an einen ComponentListener, der bietet eine Methode componentMoved
 
Hm da steh ich jetzt ein bisschen auf den Schlauch.

Ich löse doch nur ein Event innerhalb des JInternalFrames aus. Wie kann ich das denn der Zeichenoberfläche übermitteln, ohne sie im InternalFrame neu zu instanzieren?
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Ich löse doch nur ein Event innerhalb des JInternalFrames aus. Wie kann ich das denn der Zeichenoberfläche übermitteln, ohne sie im InternalFrame neu zu instanzieren?
?? Neu Instanzieren wäre ja grundsätzlich falsch. Es soll ja die bestehende Instanz neu gezeichnet werden.
Das Event wird ja an den Listener weiter gegeben und der Listener kann ja ein repaint() an der Komponente aufrufen. Dazu muss er diese natürlich kennen. Am einfachsten ist es vermutlich die Zeichnen Komponente den Listener implementieren zu lassen und diese dann als ComponentListener an den JInternalFrames zu registieren.
 

Michael...

Top Contributor
Java:
import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Stroke;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

public class Desktop {
	
	public void startDemo() {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		DrawingDesktop desktop = new DrawingDesktop();
		frame.add(desktop);
		frame.setBounds(0, 0, 300, 300);
		frame.setVisible(true);
		
		for (int i=0; i<5; i++) {
			JInternalFrame iframe = new JInternalFrame("IFrame " + i, true);
			iframe.setBounds(20 * (i+1), 50 * i, 100, 30);
			desktop.addAndShowInternalFrame(iframe);
		}
	}
	
	public static void main(String[] s) {
		new Desktop().startDemo();
	}
}

class DrawingDesktop extends JDesktopPane implements ComponentListener {
	private List<JInternalFrame> frameList = new ArrayList<JInternalFrame>();
	
	public void addAndShowInternalFrame(JInternalFrame frame) {
		this.frameList.add(frame);
		this.add(frame);
		frame.setVisible(true);
		frame.addComponentListener(this);
	}
	private Stroke stroke = new BasicStroke(3);
	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		Point last = null, current = null;
		((Graphics2D)g).setStroke(stroke);
		for (JInternalFrame iframe : frameList) {
			current = new Point(iframe.getLocation());
			current.y += iframe.getHeight()/2; 
			if (last!=null) {
				g.drawLine(last.x, last.y, current.x, current.y);
			}
			last = current;
		}
	}
	
	public void componentMoved(ComponentEvent e) {
		repaint();
	}

	public void componentResized(ComponentEvent e) {
		repaint();
	}

	public void componentShown(ComponentEvent e) {
		repaint();
	}
	
	public void componentHidden(ComponentEvent e) {
		repaint();
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C NoClassDefFoundError mit externer Jar bei Start aus Eclipse Java Basics - Anfänger-Themen 3
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
K Erste Schritte JavaFX - wie von "externer" Klasse auf Methoden des Controllers zugreifen Java Basics - Anfänger-Themen 2
S log4j in externer Library Java Basics - Anfänger-Themen 4
R Klassen Problem mit externer Klasse Java Basics - Anfänger-Themen 5
B Linux, Dateipfad, Einbindung externer Dateien.. Java Basics - Anfänger-Themen 7
I Externer Methodenaufruf, Punkt-Notation Java Basics - Anfänger-Themen 11
A paint() methode von externer Klasse aufrufen Java Basics - Anfänger-Themen 3
G Aufruf externer Funktionen Java Basics - Anfänger-Themen 7
J Methoden in externer Klasse -> Nullpointer Exception Java Basics - Anfänger-Themen 9
X Externer GUI Code verwenden / (Design Ansicht) Java Basics - Anfänger-Themen 3
M JS Import aus externer Jar Datei Java Basics - Anfänger-Themen 5
A SongChangeListener aus externer Lib Java Basics - Anfänger-Themen 5
D Öffnen externer Dateien mit Eclipse Java Basics - Anfänger-Themen 5
W Java ProcessBuilder - externer Prozess nur einmal starten und mehrere Inputs geben Java Basics - Anfänger-Themen 7
Z Text aus externer Datei in TextArea einlesen Java Basics - Anfänger-Themen 5
U Externer aufruf zum Fenster erstellen will nicht Java Basics - Anfänger-Themen 2
B externer Listener für Zeichenbereich? Java Basics - Anfänger-Themen 2
T Klassen und Objekte externer Aufruf. Java Basics - Anfänger-Themen 8
P JSP - Daten aus externer Datei auslesen und anzeigen Java Basics - Anfänger-Themen 3
M String aus externer Klasse in JTextArea schreiben Java Basics - Anfänger-Themen 4
T Öffnen externer Datei als eigener Prozess Java Basics - Anfänger-Themen 8
B Öffnen externer Dateien Java Basics - Anfänger-Themen 16
F Einbindung externer JARs Java Basics - Anfänger-Themen 2
M Externer ActionListener funkt nicht so wie ichs ma vorstell Java Basics - Anfänger-Themen 2
R Ausgaben von externer .exe einlesen 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
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
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
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
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Erste Schritte Stream-Aufruf vereinfachen Java Basics - Anfänger-Themen 3
sashady ursprüngliche Array-Werte bei erneutem Aufruf? Java Basics - Anfänger-Themen 7
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
Y Aufruf von Methode nicht möglich. Java Basics - Anfänger-Themen 2
D Aufruf von mehreren Activities bringt die app zum Absturz Java Basics - Anfänger-Themen 5
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben