Zoomen in ein JPanel... und eine andere kleine Frage

Mujahiddin

Top Contributor
Guten Tag,
Ich habe eine Klasse Graph und diverse Knoten, die auf diesem Graph abgebildet sein sollen, jeder Knoten hat seine Koordinaten etc.
Wenn ich jetzt eine Zoom-Methode einbaue, dann werden die Objekte zwar größer dargestellt, aber müsste ich dann etwa jedem einzelnen Knoten sagen: "Werde größer!", das würde sehr viel Speicher fressen und das will ich vermeiden! Gibt es irgend einen anderen Weg? Es geht ja eigentlich um die contains Funktion, wenn ich mich recht entsinne.

Zweite Frage:
graphnk.jpg

Ich habe den Komponenten im oberen ButtonPanel ein maximumSize gegeben, damit sie nicht so riesig sind. Jetzt zeigt er aber irgendwie ein JScrollPane, obwohl das gar nicht nötig ist, mit folgendem Parameter hab ich das gemacht: JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED. Auch irgendwelche simplen Vorschläge?

Liebe Grüße,
Mujahiddin.
 
Wenn ich jetzt eine Zoom-Methode einbaue, dann werden die Objekte zwar größer dargestellt, aber müsste ich dann etwa jedem einzelnen Knoten sagen: "Werde größer!", das würde sehr viel Speicher fressen und das will ich vermeiden!
Wie gross ein Objekt gezeichnet wird sollte diesem eigentlich nicht bekannt sein --> saubere Trennung zwischen Datenmodell und View, die View entscheidet in welcher Grösse sie die Knoten darstellt, die Knoten selbst dürfen eventuell ihre Wünsche äussern (min/max/preferred Size)
Ich habe den Komponenten im oberen ButtonPanel ein maximumSize gegeben, damit sie nicht so riesig sind. Jetzt zeigt er aber irgendwie ein JScrollPane, obwohl das gar nicht nötig ist, mit folgendem Parameter hab ich das gemacht: JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED. Auch irgendwelche simplen Vorschläge?
Bei der Standardeinstellung (Scrollbars nur bei Bedarf) hängt es von der PreferredSize des Viewports ab, ob die Balken angezeigt werden oder nicht. Eventuell wird die PreferredSize irgendwo gesetzt oder es befinden sich "unsichtbare" Komponenten auf dem Panel.
 
Wie gross ein Objekt gezeichnet wird sollte diesem eigentlich nicht bekannt sein --> saubere Trennung zwischen Datenmodell und View, die View entscheidet in welcher Grösse sie die Knoten darstellt, die Knoten selbst dürfen eventuell ihre Wünsche äussern (min/max/preferred Size)
Die Knoten sind eine eigene Klasse, haben ein 'Shape' und über die contains Methode wird geprüft ob der Mauszeiger über dem Knoten ist.
Von daher würde mich interessieren, ob ich einfach nur an der contains Methode rumhantieren könnte und das genauso gut klappt wie wenn ich jeden Knoten bei Zoom In vergrößere (also nicht nur optisch, sondern auch so)

Bei der Standardeinstellung (Scrollbars nur bei Bedarf) hängt es von der PreferredSize des Viewports ab, ob die Balken angezeigt werden oder nicht. Eventuell wird die PreferredSize irgendwo gesetzt oder es befinden sich "unsichtbare" Komponenten auf dem Panel.
Hab preferredSize und maximumSize mal gleich gestellt (150, 50) und es klappt trotzdem nicht.
Java:
		adjacencyBtn.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent evt)
			{
				toNotify.notifyChange(MapEvent.SHOW_ADJACENCY);
			}
		});
		adjacencyBtn.setMaximumSize(new Dimension(150, 20));
		adjacencyBtn.setPreferredSize(new Dimension(150, 20));
		add(adjacencyBtn);
 
Die Knoten sind eine eigene Klasse, haben ein 'Shape' und über die contains Methode wird geprüft ob der Mauszeiger über dem Knoten ist.
Trotzdem könnte man zwischen den Knoten und seiner graphischen Repräsentation differenzieren.
Von daher würde mich interessieren, ob ich einfach nur an der contains Methode rumhantieren könnte und das genauso gut klappt wie wenn ich jeden Knoten bei Zoom In vergrößere (also nicht nur optisch, sondern auch so)
Was willst Du da "rumhantieren"? Die Implementierung der Methode liegt ja an Dir. Aber dazu muss das Objekt, welches Shape implementiert auch seine Größe kennen.
Hab preferredSize und maximumSize mal gleich gestellt (150, 50) und es klappt trotzdem nicht.
Java:
		adjacencyBtn.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent evt)
			{
				toNotify.notifyChange(MapEvent.SHOW_ADJACENCY);
			}
		});
		adjacencyBtn.setMaximumSize(new Dimension(150, 20));
		adjacencyBtn.setPreferredSize(new Dimension(150, 20));
		add(adjacencyBtn);
Das ist ja nur ein Button, relevant ist hier das Panel das als Viewport des Scrollpanes dient.
 

Neue Themen


Zurück
Oben