Hallo.
Ich habe folgendes Problem:
Mein Projekt ist das Programmieren eines Routenplaners. Das Einblenden der Routen funktioniert folgendermaßen:
Ich habe eine JLayeredPane. Auf das unterste Layer (DEFAULT_LAYER) packe ich die Karte des Gebiets. Auf die darüberliegenden Layer packe ich jeweils ein Bild mit einem Streckenabschnitt (gleiche Größe wie die Karte, der Rest transparent).
Nachdem ein Weg geroutet wurde, wird der passende Weg angezeigt.
Die JLayeredPane hat die selbe Größe wie die Karte.
Siehe hierzu auch die Bilder:
Die Karte:
Ein Streckenabschnitt:
Mein Problem ist nun die Positionierung der Bilder. Ich positioniere die Elemente mit setBounds. Da alle Bilder die Größe der Karte haben, positioniere ich sie mit setBounds(0,0,[Breite der Karte],[Höhe der Karte]).
Zuerst einmal vorweg das was mich am meisten verwirrt: Wenn ich die Bilder der Wege alle unterschiedlich positioniere dann funktioniert alles problemlos (außer eben, dass die Strecken verschoben sind).
Die Probleme passieren erst, wenn ich alle auf die vorgesehene selbe Position (ALLERDINGS AUF UNTERSCHIEDLICHEN LAYERS) lege.
Ist das eine bekannte Eigenschaft/Problem von JLayeredPanes? Muss man in dem Fall etwas besonderes beachten?
Nun zu den Problemen selbst.
Zuerst einmal muss ich in der Breite [Breite der Karte]-1 einstellen, denn sonst wird nichts mehr außer dem angezeigten Streckenabschnitt mit der höchsten Layerposition angezeigt. Nicht einmal die Karte.
Das komische ist hier wieder, dass die Breite egal ist, sobald ich die Bilder unterschiedlich positioniere. In dem Fall kann ich auch eine riesige Breite nehmen, die über den Bildschirm reicht und es macht keine Probleme.
Benutze ich [Breite der Karte]-1 so wird zwar die Karte, aber weiterhin nur die Strecke auf dem höchsten Layer angezeigt. Blende ich diese aus wird lediglich die auf dem nächstniedirgeren Layer angezeigt.
In Bildern sieht mein Problem so aus:
Positioniere ich die Streckenabschnitte alle unterschiedlich sieht es so aus:
Alles wird angezeigt, nur eben verschoben. Hier ist es auch egal, welche Breite ich bei setBounds für die eingefügten Bilder nehme. Es geht trotzdem.
Positioniere ich alle an der selben Stelle und lege als Breite [Kartenbreite]-1 fest sieht es so aus:
Nur der auf dem höchsten Layer gelegene Streckenabschnitt wird angezeigt, aber zumindest noch die Karte.
Positioniere ich alle an der selben Stelle und lege als Breite die Kartenbreite oder eine größere fest sieht es so aus:
Es wird nichts mehr angezeigt außer dem obersten Streckenabschnitt (Die Kreise sind Teil des Streckenbildes). Nicht einmal die Karte.
Ich habe schon alles an Positionierungen probiert, mit repaint() rumprobiert und es läuft immer wieder auf das selbe hinaus.
Über allem schwebt für mich aber immer die Frage, warum es keine Probleme macht, wenn sich die Bilder an unterschiedlichen Positionen befinden. Die Probleme treten erst auf, wenn sie sich an der gleichen X- und Y-Position befinden.
Das sollte doch eigentlich völlig egal sein, da sie sich doch alle auf verschiedenen Layern befinden.
An der Transparenz liegt es ziemlich sicher nicht, da auch diese bei unterschiedlichen Positionen funktioniert.
Ich bin gerade total am verzweifeln. Ich habe keine Idee mehr, wie man das beheben könnte außer alle (über 100!!!) Einzelbilder jeweils oben oder links um 1 Pixel zu verkleinern.
Ich hoffe irgendjemand kann mir helfen und es ist vielleicht wirklich nur eine Eigenart des JPanels, die man kennen muss.
Hoffnungsvolle Grüße, Lars
PS: Den ganzen Code zu posten wird schwierig, da der sich über 14 Dateien und 1000e Zeilen Code erstreckt. Vielleicht noch falls es hilft hier die Klasse, die zum anzeigen der Bilder dient:
Ich habe folgendes Problem:
Mein Projekt ist das Programmieren eines Routenplaners. Das Einblenden der Routen funktioniert folgendermaßen:
Ich habe eine JLayeredPane. Auf das unterste Layer (DEFAULT_LAYER) packe ich die Karte des Gebiets. Auf die darüberliegenden Layer packe ich jeweils ein Bild mit einem Streckenabschnitt (gleiche Größe wie die Karte, der Rest transparent).
Nachdem ein Weg geroutet wurde, wird der passende Weg angezeigt.
Die JLayeredPane hat die selbe Größe wie die Karte.
Siehe hierzu auch die Bilder:
Die Karte:
Ein Streckenabschnitt:
Mein Problem ist nun die Positionierung der Bilder. Ich positioniere die Elemente mit setBounds. Da alle Bilder die Größe der Karte haben, positioniere ich sie mit setBounds(0,0,[Breite der Karte],[Höhe der Karte]).
Zuerst einmal vorweg das was mich am meisten verwirrt: Wenn ich die Bilder der Wege alle unterschiedlich positioniere dann funktioniert alles problemlos (außer eben, dass die Strecken verschoben sind).
Die Probleme passieren erst, wenn ich alle auf die vorgesehene selbe Position (ALLERDINGS AUF UNTERSCHIEDLICHEN LAYERS) lege.
Ist das eine bekannte Eigenschaft/Problem von JLayeredPanes? Muss man in dem Fall etwas besonderes beachten?
Nun zu den Problemen selbst.
Zuerst einmal muss ich in der Breite [Breite der Karte]-1 einstellen, denn sonst wird nichts mehr außer dem angezeigten Streckenabschnitt mit der höchsten Layerposition angezeigt. Nicht einmal die Karte.
Das komische ist hier wieder, dass die Breite egal ist, sobald ich die Bilder unterschiedlich positioniere. In dem Fall kann ich auch eine riesige Breite nehmen, die über den Bildschirm reicht und es macht keine Probleme.
Benutze ich [Breite der Karte]-1 so wird zwar die Karte, aber weiterhin nur die Strecke auf dem höchsten Layer angezeigt. Blende ich diese aus wird lediglich die auf dem nächstniedirgeren Layer angezeigt.
In Bildern sieht mein Problem so aus:
Positioniere ich die Streckenabschnitte alle unterschiedlich sieht es so aus:
Alles wird angezeigt, nur eben verschoben. Hier ist es auch egal, welche Breite ich bei setBounds für die eingefügten Bilder nehme. Es geht trotzdem.
Positioniere ich alle an der selben Stelle und lege als Breite [Kartenbreite]-1 fest sieht es so aus:
Nur der auf dem höchsten Layer gelegene Streckenabschnitt wird angezeigt, aber zumindest noch die Karte.
Positioniere ich alle an der selben Stelle und lege als Breite die Kartenbreite oder eine größere fest sieht es so aus:
Es wird nichts mehr angezeigt außer dem obersten Streckenabschnitt (Die Kreise sind Teil des Streckenbildes). Nicht einmal die Karte.
Ich habe schon alles an Positionierungen probiert, mit repaint() rumprobiert und es läuft immer wieder auf das selbe hinaus.
Über allem schwebt für mich aber immer die Frage, warum es keine Probleme macht, wenn sich die Bilder an unterschiedlichen Positionen befinden. Die Probleme treten erst auf, wenn sie sich an der gleichen X- und Y-Position befinden.
Das sollte doch eigentlich völlig egal sein, da sie sich doch alle auf verschiedenen Layern befinden.
An der Transparenz liegt es ziemlich sicher nicht, da auch diese bei unterschiedlichen Positionen funktioniert.
Ich bin gerade total am verzweifeln. Ich habe keine Idee mehr, wie man das beheben könnte außer alle (über 100!!!) Einzelbilder jeweils oben oder links um 1 Pixel zu verkleinern.
Ich hoffe irgendjemand kann mir helfen und es ist vielleicht wirklich nur eine Eigenart des JPanels, die man kennen muss.
Hoffnungsvolle Grüße, Lars
PS: Den ganzen Code zu posten wird schwierig, da der sich über 14 Dateien und 1000e Zeilen Code erstreckt. Vielleicht noch falls es hilft hier die Klasse, die zum anzeigen der Bilder dient:
Java:
package Extensions;
import java.awt.*;
import javax.swing.*;
public class ImagePanel extends JPanel
{
private Image img;
public ImagePanel(String img)
{
this(new ImageIcon(img).getImage());
}
public ImagePanel(Image img)
{
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
}
@Override
public void paintComponent(Graphics g)
{
g.drawImage(img, 0, 0, null);
}
}