[gelöst] Verschiebbare Komponenten mit Linien verbinden

Status
Nicht offen für weitere Antworten.

philth

Mitglied
Hallo,

aufgrund mangelhafter Planung bin ich bei der Umsetzung meiner Studienarbeit in Schwierigkeiten geraten was die Benutzerschnittstelle betrifft ;)

Im Bild sieht man ein JPanel, auf welchem weitere JPanel angeordnet sind (mit der Maus bewegbar, NullLayout). Die kleinen JPanel hab ich genommen wegen der MouseListener und dem automagischen repaint().

Problem: Ich muss die Punkte auf den kleinen Panels (bitte nich zuviel reininterpretieren ;) sind nur "Testobjekte" erstmal) noch mit Linien verbinden. Idealerweise sollen die Linien sichtbar in die kleinen Rechtecke hineinreichen, muss aber nicht sein (am Ende soll es eben aussehen wie ein Blockschaltbild oder Klassendiagramm oder ...). Dazu fallen mir folgene Lösungen ein:

a) malen der Linien als Pfade auf das untenliegende JPanel. Hier kann es aber Probleme geben, weil ich auf einem Panel sowohl zeichne als auch Komponenten platziere, oder? Außerdem müssen die Linien immer neu gezeichnet werden, wenn die kleinen Panels verschoben werden

b) weiteres JPanel über alles drüberlegen, darauf malen. Hier frage ich mich dann, ob die Mausevents dann noch bei den überdeckten Panels ankommen oder ob ich sicherstellen kann, dass das - ich nenne es jetzt mal "Verbindungslinienpanel" - niemals eine Action auslöst.

Für innovative Vorschläge oder auch Ermutigungen, alles Shape-basiert zu lösen (vielleicht noch unschlagbare Argumente dafür) bin ich sehr dankbar!

Grüße
Philipp

screenshot.png
 

Ariol

Top Contributor
Sowas?

Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Demo extends JFrame
{

	public Demo()
	{
		setLayout(null);
		final JPanel unten = new JPanel();
		unten.setLayout(null);
		unten.setBounds(0, 0, 300, 300);
		
		
		JPanel element1 = new JPanel();
		element1.setName("ELEMENT1");
		element1.setBackground(Color.RED);
		element1.setBounds(30, 30, 60, 60);
		
		JPanel element2 = new JPanel();
		element2.setName("ELEMENT2");
		element2.setBackground(Color.GREEN);
		element2.setBounds(30, 100, 60, 60);
		
		JPanel element3 = new JPanel();
		element3.setName("ELEMENT3");
		element3.setBackground(Color.YELLOW);
		element3.setBounds(100, 30, 60, 60);
		
		JPanel element4 = new JPanel();
		element4.setName("ELEMENT4");
		element4.setBackground(Color.BLUE);
		element4.setBounds(100, 100, 60, 60);
		
		JPanel oben = new JPanel();
		oben.setBounds(0, 0, 300, 300);
		oben.addMouseListener(new MouseAdapter()
		{
			public void mousePressed(MouseEvent e)
			{
				System.out.println("START:" + unten.getComponentAt(e.getPoint()).getName());
			}

			public void mouseReleased(MouseEvent e)
			{
				System.out.println("ENDE: " + unten.getComponentAt(e.getPoint()).getName());
			}
			
		});
		
		
		unten.add(element1);
		unten.add(element2);
		unten.add(element3);
		unten.add(element4);
		unten.add(oben);
		
		add(unten);
		setPreferredSize(new Dimension(200,220));
		pack();
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	public static void main(String[] args)
	{
		new Demo();
	}
}

Eines der bunten Vierecke anklicken und auf einem anderem,dem gleichen oder dem Hintergrund wieder loslassen.
In der Konsole wird angezeigt von wo nach wo geklickt wurde.

Das mit den Element-Namen ist nur zum besseren Verständnis.
 

philth

Mitglied
Vielen Dank!

Ich glaube, so werde ich es auch machen - ein Panel drüberlegen, dort die Verbindungslinien zeichnen lassen und dann die MouseEvents an die drunterliegenden Objekte durchreichen. GetComponentAt() liefert lt. Java-Doku immer die oberste Komponente also brauche ich für dieses Fenster nur einen Listener, implementiere die jeweiligen Aktionen dann in den Komponenten und reiche die Events durch ... super Sache! Danke.

In der Komponente dann sowas wie:
Code:
public class BlackBox extends JPanel implements Manipulierbar{
    public void mouseMoved(MouseEvent e){
     do();
     some = thing;
   }
}

public interface Manipulierbar{
   public void mouseMoved(MouseEvent e);
}

... und im drüberliegenden Panel
Code:
public void mouseMoved(MouseEvent e){
   (Manipulierbar) panel.getComponentAt(e.getPoint()).mouseMoved(e);
}

(ganz durchsteigen werd ich das dann morgen)

Hast du vielleicht noch einen Tipp für mich, nach was ich suchen könnte, wenn ich mich näher drüber informieren möchte, wie man Darstellung und darzustellende Daten sauber trennt? Bei mir kennt nämlich fast jeder jeden, obwohl ich darauf achte, es zu vermeiden.

Grüße und danke,
Philipp
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Swing [Gelöst]Radiobuttons "Verknüpfen" AWT, Swing, JavaFX & SWT 3
H Puzzle - Erkennen wenn gelöst (array vergleichen) AWT, Swing, JavaFX & SWT 10
Pithecanthropus [gelöst] JTree, aber nicht mit Strings, sondern mit Objects? AWT, Swing, JavaFX & SWT 2
Pithecanthropus [gelöst ]ActionListener soll nur Änderungen "bemerken" AWT, Swing, JavaFX & SWT 2
H [gelöst] Swing Elemente verdecken AWT, Swing, JavaFX & SWT 14
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
H Swing [gelöst]Neues Swing Element erstellen AWT, Swing, JavaFX & SWT 4
J [gelöst] nicht installierte Schrftart nutzen AWT, Swing, JavaFX & SWT 8
M Swing [gelöst] JTable: Edit abstellen AWT, Swing, JavaFX & SWT 3
S Swing [gelöst] GUI-Befehle bleiben wirkungslos, wenn danach was großes gemacht wird. AWT, Swing, JavaFX & SWT 5
S [gelöst] API zum bequemen Navigieren und Auswählen von Ordnern AWT, Swing, JavaFX & SWT 3
P Swing [gelöst/erledigt] Gleicher Code läuft unterschiedlich unter Linux und Windows AWT, Swing, JavaFX & SWT 5
Dragonfire ZoomImage flackert -> Fehler: repaint-Aufruf [gelöst] AWT, Swing, JavaFX & SWT 5
J [gelöst] repaint problem AWT, Swing, JavaFX & SWT 2
A [gelöst] Grundlagenfehler AWT, Swing, JavaFX & SWT 2
R Gelöst: panelGrösse innerhalb eines JFrames AWT, Swing, JavaFX & SWT 7
M problem mit repaint()-Methode[gelöst] AWT, Swing, JavaFX & SWT 8
ModellbahnerTT [gelöst]Frage und Problem zu Swing AWT, Swing, JavaFX & SWT 4
G [gelöst] "Größe" von drawString AWT, Swing, JavaFX & SWT 4
T [gelöst] JFrame Grundlagen (Größe und Darstellung) AWT, Swing, JavaFX & SWT 6
E Inhalt einer JComboBox ... -gelöst AWT, Swing, JavaFX & SWT 2
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
M Verschiebbare JComponent AWT, Swing, JavaFX & SWT 5
W Swing Swing - Eigene Komponenten erstellen AWT, Swing, JavaFX & SWT 17
W Swing GUI - Komponenten platzieren AWT, Swing, JavaFX & SWT 15
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
M Swing Komponenten erscheinen beim darüberfahren? AWT, Swing, JavaFX & SWT 7
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing Komponenten organisieren AWT, Swing, JavaFX & SWT 9
S Überlappung zweier Komponenten AWT, Swing, JavaFX & SWT 12
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben