panel hintergrundbild falsch implementiert ?

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
hey, mit folgendem Code lade ich ein hintergrund bild in ein panel:

Code:
    MediaTracker mt = new MediaTracker(this);
        img = Toolkit.getDefaultToolkit().getImage("MEIN_HINTERGRUNDBILD.png");
        mt.addImage(img, 0);
        try {
            mt.waitForAll();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

(das panel liegt auf einem JFrame, hat aber exakt die selbe Dimension wie das JFrame selber auch)

Das Problem ist anscheinend, dass bei mir alles korrekt ist, bei Windows-Usern (Ich benutze Linux ubuntu), aber vielleicht auch einfach bei jedem System mit anderen Einstellungen (kann ich nicht testen), das ganze "verschoben" ist.

konkretes Beispiel:

Das bild zeigt ein Haus. Wenn ich mit der Maus auf die Türklinke zeige und mir die Koordinaten ausgeben lasse, bekomme ich den Punkt (x,y).

Wenn nun ein anderer User genau auf die gleiche Stelle zeigt, kommt bei ihm der Punkt (x, y+-?).

Das heisst: Der x-Wert ist der selbe wie bei mir, nur der y-Wert nicht!

Ich hab mal gehört dass z.B. auch der Fenstertitel Platz im Panel einnimmt. Eventuell beeinflusst das die Platzierung des Bildes im Panel/Frame, da bei verschiedenen Systemen diese Titelleiste anders eingestellt ist.

Nun, die Frage ist aber: Wie implementiere ich das Bild so, dass es bei jedem User gleich liegt? Das ist nämlich sehr wichtg für mein Projekt.

Da ich nicht genau weiss, was ihr so braucht, poste ich hier nochmal den kompletten Panel-Konstruktor, sowie auch den Frame-Konstruktor, in dem das Panel liegt:

Code:
public class ActionPanel extends JPanel implements MouseListener, MouseMotionListener {

    public ActionPanel(final RunThread thread, Dimension size) {

        setPreferredSize(size);
        setLayout(null);

        addMouseListener(this);
        addMouseMotionListener(this);

        MediaTracker mt = new MediaTracker(this);
        img = Toolkit.getDefaultToolkit().getImage("guipic.png");
        mt.addImage(img, 0);
        try {
            mt.waitForAll();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

Code:
public class Main extends JFrame {

    public Main(String title, Dimension size) {

        super(title);
        setPreferredSize(size);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setLayout(new BorderLayout());

        add(new ActionPanel(new RunThread(), size),BorderLayout.NORTH);
        pack();
        setLocationRelativeTo(null);
    }

Dank euch
 

Marco13

Top Contributor
Statt
add(new ActionPanel...
sollte da
getContentPane().add(new ActionPanel...
stehen. Das hat aber auf das Problem vmtl. keinen Einfluß.

Das JPanel und der JFrame können nicht die gleiche (preferred)Size haben. (Ich glaube sogar, den PreferredSize bei einem JFrame zu setzen, bringt nichts.) Das preferredSize sollte nur beim Panel gesetzt werden. Beim frame.pack() passt sich der Frame dann daran an.

Die Titelleiste ist zwar bei unterschiedlichen Betriebssystemen unterschiedlich hoch, aber das sollte egal sein: Der MouseListener hängt ja am JPanel, und in dem wird das Bild eigentlich immer gleich gezeichnet. (WIe zeichnest du das Bild? In der paintComponent?!) Ggf. mal ein paar Debug-Ausgaben einbauen...
Code:
mouseClicked(MouseEvent e){
System.out.println("Event auf "+e.getSource()+" bei "+e.getPoint());
}
oder so...
 
G

Guest

Gast
ich habe so eine "Debug" funktion am mouse listener hängen, daher weiss ich es ja.

das bild male ich in der paintComponent des panels, und zwar so:

Code:
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);

die anderen sachen hab ich grad ausprobiert, bringt aber alles nix.
 
G

Guest

Gast
kann mir keiner helfen ? :(

ich dachte jetzt, dass sei einfach ein Anfängerfehler. Woran kann das denn noch liegen, dass das Bild auf der y-Achse bei verschiedenen Usern scheinbar anders ausgerichtet ist? (die x-Achse ist ja die gleiche)

Es muss ja anscheinend an irgendetwas liegen, was die Höhe des Panels oder Fensters beeinflusst...
 

Marco13

Top Contributor
Kann den niemand das Problem nachvollziehen? :(

Um welche Größenordnungen geht es denn bei dieser Abweichung in y-Richtung? Ist der Fehler (bei gleichem User) immer gleich groß? Taucht die Abweichung irgendwo nochmal auf, wenn man sich z.B. frame.getInsets() ausgeben läßt?
 
G

Guest

Gast
also nicht dass es zu missverständnissen kommt, wenn ich sage, dass die y-werte anders sind.

das ding ist folgendes:

ich hatte nen bild eben und da konnte man per mouselistener polygone einzeichnen, also der hat den quellcode für die ecken der polygone zurückgegeben.

zwei verschiedene windows-user haben mit dieser funktion polygone erstellt. die grafik zeigt eine karte mit ländern und diese länder haben sie eben nachgefahren.

anschließend haben die länder (polygone) geleuchtet wenn man an die entpsrechende stelle auf der grafik gefahren ist.

bei ihnen hat es genau gepasst, sprich es hat der bereich geleuchtet den sie zuvor mit der maus nachgefahren haben.

dann hab ich diesen quellcode bekommen und habs gestartet, aber bei mir waren alle leuchtenden polygone versetzt, also nicht deckungsgleich mit der grafik.

der unterschied ist etwa 0,5 - 1 cm, alles nach oben verschoben. die x-werte sind wie gesagt auch bei mir passend.

deshalb hab ich jetzt gesagt, das bild ist verschoben. weil ja scheinbar die windows-user andere punkte vom mouselistener bekommen haben als ich an der gleichen Stelle auf dem bild.
sonst würde es bei mir ja auch passen.

scheinbar ist bei mir das komplette bild 0,5-1 cm nach unten geschoben. aber es ist exakt der gleiche quellcode.

ein zweites linux/ubuntu system hab ich eben leider nicht, kann also jetzt nicht sagen ob es am windows liegt oder sonst was.

aber ich dachte eben dass es das ist, weil das bild sowie der quellcode genau gleich sind.

ich kann leider auch nicht sagen woran es liegen könnte. den code kennt ihr ja. oder kann dafür noch irgendwas relevant sein?
 
G

Guest

Gast
edit:

okay ich hab ne idee, bitte zieht euch:

http://rapidshare.com/files/99826974/dist.zip.html

das bild müsst ihr in den hauptordner wenn ihr dafür in eclipse/netbeans n projekt macht oder so, ich denke ich wisst das eh besser als ich.

dann startet es bitte und bewegt die maus mal in amerika rum.
falls bei euch das aufleuchten NICHT verschoben aussieht, also gut, dann
fahrt mit der maus an den punkt, wo sich die länder ägypten, nordwest-Afrika und Ost-Afrika schneiden.

bei mir ist es ja alles verschoben, und bei mir hat dieser punkt die koordinaten:

538,380

(die koordinaten seht ihr ja oben links im fenster)

dann müssten wir eigentlich feststellen, dass eure koordinaten anders sind.

bei mir ist ganz oben links die koordinate 0,0 (was ja auch so sein sollte). bei euch müsste das dann aber gar nicht so sein, und dann wüssten wri schon mal sicher dass das bild verschieden im panel angezeigt wird, denn der mouselistener hängt ja nur im panel, nicht im JFrame.

wäre nett wenn ihrs testet. als windows-user müsstet ihr ja jetzt eigentlich alles korrekt angezeigt bekommen.

danke.
 

Quaxli

Top Contributor
Bei mir haben die Koordinaten zwar eher 537,379 aber das ist wohl unerheblich. Ansonsten sind die "aufpoppenden Schatten" bei mir auch erheblich verschoben.
 

Marco13

Top Contributor
Der beschriebene Punkt liegt bei mir auch an der beschriebenen Stelle. Die Schetten sind deutlich verschoben. (Je weiter südlich das Land liegt, umso stärker ist die Verschiebung.

Ggf. solltest du das Bild auch nicht mit
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
sondern mit
g.drawImage(img, 0, 0, this);
zeichnen. (Aber das sollte auch keine Rolle spielen)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Hintergrundbild im Panel verschwindet sofort AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
H Aus Array Container Panel an Tabbedpane zuweisen AWT, Swing, JavaFX & SWT 29
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
J Aufklappbares Panel in Toolbar AWT, Swing, JavaFX & SWT 6
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
A Swing Panel mit ScrollBar AWT, Swing, JavaFX & SWT 7
K Panel verdeckt MenuItem AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Graphics auf Panel AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
P AWT Panel überschreibt vorheriges... AWT, Swing, JavaFX & SWT 2
Thallius Swing Warum kann man Texte im Panel nicht markieren? AWT, Swing, JavaFX & SWT 1
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M AWT Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 7
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
M JavaFX Slide Panel AWT, Swing, JavaFX & SWT 2
P Swing Panel nicht sichtbar AWT, Swing, JavaFX & SWT 1
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
S ScrollPane in Textarea und auf Panel AWT, Swing, JavaFX & SWT 4
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
S Swing JMenu löscht auf panel gezeichnetes AWT, Swing, JavaFX & SWT 3
X Java Panel zeitweise repainten AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
B zweidimensionales Buttonarray auf Panel AWT, Swing, JavaFX & SWT 11
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
F textarea lässt panel verschwinden AWT, Swing, JavaFX & SWT 4
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Panel lässt sich nicht bewegen AWT, Swing, JavaFX & SWT 2
E Panel mit Leben füllen AWT, Swing, JavaFX & SWT 2
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Panel in Panel zentriert nicht richtig AWT, Swing, JavaFX & SWT 3
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
O LayoutManager Panel in Panel "maximieren" AWT, Swing, JavaFX & SWT 2
C AWT Horizontale Linie in einem Panel AWT, Swing, JavaFX & SWT 12
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
B Export eines Panel mit ScrollBar AWT, Swing, JavaFX & SWT 4
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
bluerob Panel im BorderLayout South wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
M Swing Panel klassenübergreifend ändern AWT, Swing, JavaFX & SWT 6
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H Scroll Panel wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 6
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
C Bild auf Panel vergrößern und verschieben AWT, Swing, JavaFX & SWT 4
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
H LayoutManager Panel verschieben sich AWT, Swing, JavaFX & SWT 5
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
S Vaadin: Panel AWT, Swing, JavaFX & SWT 10
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
K Panel zu Laufzeit ändern AWT, Swing, JavaFX & SWT 6
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
D Panel aus externer Klasse holen AWT, Swing, JavaFX & SWT 2
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
J JPanel mit anderem Panel aus anderer Klasse setzen AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Panel-Zeichnung erscheint nicht AWT, Swing, JavaFX & SWT 7
S Panel rapaint AWT, Swing, JavaFX & SWT 18
T AffineTransform wirkt sich nur auf dem ersten Panel aus AWT, Swing, JavaFX & SWT 3
K Swing: Panel in Panel erzeugen AWT, Swing, JavaFX & SWT 11
M Panel in SWT einfügen AWT, Swing, JavaFX & SWT 12
T auf Panel zeichnen AWT, Swing, JavaFX & SWT 4
A FormLayout Panel-Breite AWT, Swing, JavaFX & SWT 7
Dit_ "Expandable" Panel ? AWT, Swing, JavaFX & SWT 6
A Panel-Unterklasse funktioniert nicht AWT, Swing, JavaFX & SWT 16
A Panel zu klein AWT, Swing, JavaFX & SWT 14
M Eigenes Panel aus Component? AWT, Swing, JavaFX & SWT 5
S Swing Größe von JLabels verändern sich in einem Panel unterschiedlich AWT, Swing, JavaFX & SWT 6
B Panel als Bild speichern AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben