Koordinaten gehen falsch !

Hdr

Mitglied
Ich beobachte einen merkwürdigen Effekt:

In meinem JFrame gibt es eine ganze Reihe von JPanels mit verschiedenen Funktionen.
Ich wollte diese zur Erhöhung der Übersichtlichkeit und zur Verdeutlichung der Zusammenhänge wollte ich diese mit Linien verbinden.

Nun stelle ich fest, dass die Koordnaten der Linien nicht mit den Koordinaten der JPanels übereinstimmen. Und zwar gehen sie in der Sekrechten um 35, in der Waagrechten um 10 Pixel falsch.

Kennt jemand diesen merkwürdigen Effekt ?
Java:
    public void paint (Graphics g){
       super.paintComponents (g);
       Graphics2D g2 = (Graphics2D) g;
       g2.setColor(Color.black);
       BasicStroke stil = new BasicStroke(2.0f);
       g2.setStroke(stil);
       g2.drawLine(0, 0, 200, 440);  //JPanel auf 200,440
       g2.drawLine(0, 0, 210, 475);  //kommt tatsächlich auf dem JPanel an !
       g2.drawLine(0, 0, 450, 70);   //JPanel auf 450,70
       g2.drawLine(0, 0, 460, 105);  //kommt tatsächlich an !
       g2.drawLine(0,0,1470,440);    //JPanel auf 1470,440
       g2.drawLine(0, 0, 1480, 475); //kommt tatsächlich an !
       g2.drawLine(0, 800, 1470, 440);// dto
       g2.drawLine(0, 800, 1480, 475);// dto
    }
 

JStein52

Top Contributor
Mhmmm ... ok, dann sollten sich die Koordinaten ja auf den gleichen Ursprung beziehen. Ich hatte vermutet dass da die Breite der Fensterrahmen eine Rolle spielen könnte. Ist dann aber eher nicht so.
 

Hdr

Mitglied
Eventuell hat es damit zu tun, dass die JPanels im contentPane liegen, die paint (Graphics g) aber nicht ?

z. B.
Java:
           contentPane.getGraphics().drawLine(0, 0, 900, 170);
komm richtig an. Das steht aber in einem Programm, das durch einen Button angestoßen wird.
Das Zeichenprogramm steht hinter dem } von main und vor dem } von class.

Ein Zeichenprogramm innerhalb von main hab ich nicht hingekriegt.
 

Harry Kane

Top Contributor
In einer JComponent (und ein JPanel ist eine) paint zu überschreiben, ist immer etwas gefährlich. Überschreibe lieber paintComponent(), und rufe als erstes super.paintComponent() auf (und nicht wie du es getan hast, paintComponents()). Ev. kommt der Offset dadurch.
 

Hdr

Mitglied
danke zunächst mal, aber hilft nicht wirklich weiter.
Java:
    public void paintComponent (Graphics g){
       super.paintComponents (g);
       Graphics2D g2 = (Graphics2D) g;
       g2.setColor(Color.black);
       BasicStroke stil = new BasicStroke(2.0f);
       g2.setStroke(stil);
       g2.drawLine(0, 0, 200, 440);  //JPanel auf 200,440
usw.
führt zwar nicht zu einer Fehlermeldung, aber es wird auch nichts gezeichnet.
Und wenn ich das "s" weglasse, kommt eine Fehlermeldung:
"paintComponent is undefined for JFrame"
 

Harry Kane

Top Contributor
Eventuell hat es damit zu tun, dass die JPanels im contentPane liegen, die paint (Graphics g) aber nicht ?
Das könnte sein. Ich hatte übersehen, dass du in einem JFrame zeichnest.
Lege deine JPanels in ein "übergeordnetes" JPanel, gebe dem eine Null-Layout, und überschreibe dann in dem JPanel die paintComponent().
 

Hdr

Mitglied
Danke, ja werde ich wohl tun.
Ist aber viel Arbeit und wird erst in den nächsten Tagen geschehen.
Eine andere Frage:
Wenn ich die Verschiebung beim Zeichen berücksichtige, kann ich mich darauf verlassen, dass es bei der Verschiebung bleibt oder kann es passieren, dass es sich das System anders überlegt und die Verschiebung irgendwann zu null macht ?
Dann wäre alles wieder verrutscht.
 

Harry Kane

Top Contributor
Das kann durchaus passieren. Ich vermute, dass die offsets durch den Titelbereich des JFrame und durch die Ränder verursacht werden, und die könnten sich beim ändern des Look&Feel in der Tat auch ändern.
 

Hdr

Mitglied
Danke zunächst den Disputanten.
Jetzt eine ergänzende Frage dazu;
Java:
       JButton btnZeichnen = new JButton("Zeichnen");
       btnZeichnen.setBounds(12, 0, 83, 25);
       contentPane.add(btnZeichnen);
       btnZeichnen.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent arg0) {
               contentPane.getGraphics().drawLine(0, 0, 900, 170);
           }
       });
Die mit diesem Programm gezeichnete Linie liegt genau richtig.
Mein Problem wäre gelöst, wenn es ein Ereignis gäbe von der Art
"Frame wird gezeichnet" oder "Frame startet"
wie es das z.B. bei VisualBasic gibt. Dann könnte ich die Zeichnungen dort unterbringen.

Oder weiß jemand eine Methode mit der man Linien auf den contentPane eines Frames malen kann ?
(Nicht in einem JPanel, das ist kein Problem !)
 

Harry Kane

Top Contributor
Mein Problem wäre gelöst, wenn es ein Ereignis gäbe von der Art
"Frame wird gezeichnet" oder "Frame startet"
wie es das z.B. bei VisualBasic gibt. Dann könnte ich die Zeichnungen dort unterbringen.
Das in Kombination mit dem getGraphics() ist ein Workaround, von dem ich nur abraten kann. Warum mit Krücken einen Umweg machen?
Die richtige Lösung ist: in einem JPanel zeichnen und darin auch die Komponenten adden.
Die content pane eines JFrame ist übrigens ein JPanel.
[edit] Wenn schon dreckig, dann bitte ohne getGraphics(). Alternative:
die root pane des JFrame beschaffen, dessen bounds bestimmen, und davon die x und y Koordinate als Offset nehmen. Bei diesem Beispiel sind die Koordinaten x=8 und y=30.
Java:
public class JFrameStuff {

    public static void main(String[] args) {
        JFrame f = new JFrame("A JFrame");
        JLabel sizeLabel = new JLabel(f.getRootPane().getBounds().toString());
        f.getContentPane().add(new JLabel(f.getContentPane().getClass().getSimpleName()));
        f.getContentPane().add(sizeLabel, BorderLayout.NORTH);
        f.getContentPane().addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent ce){
                sizeLabel.setText(f.getRootPane().getBounds().toString());
            }
        }
        );
        f.pack();
        f.setVisible(true);
    }
}
 
Zuletzt bearbeitet:

Hdr

Mitglied
Erst einmal vielen Dank !

Aber: Ist das wirklich ernsthaft die Philosophie der Sprache ?
Ich habe wie jeder Maler eine Leinwand, genannt "JFrame". Auf diese Leinwand muss ich dann eine Pappe kleben, genannt "contentPane". Schon diese Notwendigkeit erschließt sich dem Laien nur schwer.

Auf dieser Pappe kann ich aber nur Components unterbringen (also um im Bild zu bleiben:patchwork kleben), Linien und geometrische Figuren sind nicht oder nicht korrekt möglich.

Um ein komplettes Bild malen zu können, brauche ich eine dritte Unterlage, genannt "JPanel" !
Wenn ich eine solche benutze kann ich aber die Properties der verwendeten Components nicht mehr im Disign-Modus einstellen.
Das ist alles nicht sehr plausibel.

Trotzdem: nochmals vielen Dank.
 

Harry Kane

Top Contributor
Um mal bei deiner Analogie zu bleiben: Der JFrame ist nicht primär als Leinwand gedacht, sondern als Staffelei, welce es dir erlaubt, dein Bild zu verschieben und in der Größe zu ändern.
Und um es nochmal zu sagen: Du brauchst keine drei Komponenten. Überschreibe bei einem JPanel die paintComponent(), packe zusätzlich deine Komponenten auf das JPanel, und verwende dieses Spezialpanel dann als content pane im JFrame.
Wie oben schon ausgeführt, kommt der Offset daher ( und ich spare mir jetzt Vokabeln wie "vermutlich" oder "höchstwahrscheinlich"), dass du im Koordinatensystem des JFrame zeichnest (also von seiner linken oberen Ecke aus), aber die Komponenten-Koordinaten im content pane Koordinatensystem definiert sind.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Umrechnung Koordinaten zu Winkel Java Basics - Anfänger-Themen 3
J Koordinaten per Schleife ausgeben Java Basics - Anfänger-Themen 6
L x und y Koordinaten in ein Array schreiben Java Basics - Anfänger-Themen 7
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
CptK Methoden Koordinaten relativ zur Rotation eines Bildes bestimmen Java Basics - Anfänger-Themen 8
F Koordinaten nach 360° auf 0° setzen Java Basics - Anfänger-Themen 2
F Koordinaten umrechnen Java Basics - Anfänger-Themen 10
S Jbuttons an Koordinaten Java Basics - Anfänger-Themen 33
A Klassen Zahlen einlesen, an Klasse übergeben und Koordinaten ausgeben Java Basics - Anfänger-Themen 1
TheSorm Koordinaten von gedrehten Objekten Java Basics - Anfänger-Themen 4
J Mit Eclipse PLZ in Koordinaten umwandeln und ausgeben Java Basics - Anfänger-Themen 3
A Koordinaten transformieren (Rotation) Java Basics - Anfänger-Themen 4
N Problem bei Koordinaten als int? Java Basics - Anfänger-Themen 6
-horn- Einfache graphische Darstellung von 3D Koordinaten für Flugbahnen? Java Basics - Anfänger-Themen 4
L Koordinaten bestimmen Java Basics - Anfänger-Themen 8
P Erste Schritte Koordinaten Zuweisung Java Basics - Anfänger-Themen 6
Dit_ Ich kenne meine Koordinaten. Wo bin ich? Java Basics - Anfänger-Themen 2
J 2d Koordinaten in Array richtig nutzen Java Basics - Anfänger-Themen 2
F Koordinaten JList darstellen Java Basics - Anfänger-Themen 4
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
T Uhrzeigersinn anhand von Koordinaten Java Basics - Anfänger-Themen 7
K karthesische Koordinaten Java Basics - Anfänger-Themen 3
Luk10 Images und Koordinaten Java Basics - Anfänger-Themen 4
S Koordinaten der Maus wiedergeben Java Basics - Anfänger-Themen 6
M Problem mit Koordinaten - Objekte werden nicht an gewünschter Stelle gezeichnet Java Basics - Anfänger-Themen 6
N Koordinaten aus Area bekommen? Java Basics - Anfänger-Themen 3
Developer_X Kreiskoordinaten in Normale Koordinaten umrechnen Java Basics - Anfänger-Themen 4
W Koordinaten mit System.in.read() setzen Java Basics - Anfänger-Themen 2
M Cursor Koordinaten ändern Java Basics - Anfänger-Themen 4
K Koordinaten von Swing Komponenten Java Basics - Anfänger-Themen 2
T Koordinaten eines Vektor übergeben Java Basics - Anfänger-Themen 21
H Tooltips und Button Koordinaten Java Basics - Anfänger-Themen 2
K Koordinaten eines 2D-Feldes erstellen Java Basics - Anfänger-Themen 4
F Gibt es eine Datenstruktur für Koordinaten x, y? Java Basics - Anfänger-Themen 8
M Mit Koordinaten, JToolTip auf JPanel darstellen Java Basics - Anfänger-Themen 3
C Koordinaten von Punkten übergeben und zeichnen lassen Java Basics - Anfänger-Themen 8
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
K Java Aufgaben-Wie ran gehen? Java Basics - Anfänger-Themen 6
A Wie sollte ich es am besten an gehen - denkweise Java Basics - Anfänger-Themen 48
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
G Kann das so gehen? (Methode) Java Basics - Anfänger-Themen 10
D Datentypen 2 d array erweitern und ins negative gehen. Java Basics - Anfänger-Themen 9
S Werte eines Objektes gehen verlohren Java Basics - Anfänger-Themen 4
B Split, Exception - Obwohl es gehen MUSS Java Basics - Anfänger-Themen 3
T Erste Schritte while Schleife die eigendlich nicht gehen dürfte Java Basics - Anfänger-Themen 19
M Junit tests gehen nicht Java Basics - Anfänger-Themen 2
S Vergleichsfunktionen gehen nicht! Java Basics - Anfänger-Themen 4
J Mouseevents gehen nicht auf Objekten auf einen Jpanel Java Basics - Anfänger-Themen 3
E Java installieren (Tutorials gehen nicht). unter Win Vista Java Basics - Anfänger-Themen 24
D Buttons gehen trotz enebled(false) Java Basics - Anfänger-Themen 8
M gehen applets auch in .jar dateien? Java Basics - Anfänger-Themen 3
J Verhindern das Werte in einem Array verloren gehen Java Basics - Anfänger-Themen 13
A wie soll Löschen von Code in Dokumenten gehen? Java Basics - Anfänger-Themen 12
D Button usw gehen nicht dahin, wo ich es will! Java Basics - Anfänger-Themen 2
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
L Datum - Monat und Jahr werden falsch angezeigt Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
O Warum ist meine Antwort falsch? Java Basics - Anfänger-Themen 3
O Warum ist die Auswahl falsch? Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
Kapfski Was habe ich falsch gemacht? Hilfe! Java Basics - Anfänger-Themen 17
R FXMLLoader Pfad falsch`? Java Basics - Anfänger-Themen 4
S Berechnung der sleep time ist falsch Java Basics - Anfänger-Themen 46
D Zahlen werden falsch gekürzt :? Java Basics - Anfänger-Themen 27
J String wird in GUI falsch ausgegeben Java Basics - Anfänger-Themen 10
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
J Was mache ich falsch in meiner Java Anwendung? Java Basics - Anfänger-Themen 11
N Javac -version der Befehl ist entweder falsch geschrieben oder...... Java Basics - Anfänger-Themen 8
Z Klassen Error: ';' expected - was mache ich falsch? Java Basics - Anfänger-Themen 4
A Ich habe das Gefühl etwas grundlegendes falsch zu machen Java Basics - Anfänger-Themen 6
L Ist an diesem Befehl irgendwas falsch? Java Basics - Anfänger-Themen 2
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
M Was ist daran falsch Java Basics - Anfänger-Themen 2
A Arrays addieren- Was mache ich falsch?? Java Basics - Anfänger-Themen 2
S Code richtig / besser machbar? (Nicht sicher, ob Code selbst falsch ist) Java Basics - Anfänger-Themen 4
L AES - Irgendwas falsch? Java Basics - Anfänger-Themen 0
I Programm von mir - keine Ahnung mehr ob richtig falsch:-( Java Basics - Anfänger-Themen 6
B Wieso wird hier so viel als falsch angezeigt? Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Was ist falsch? Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Was ist falsch? Java Basics - Anfänger-Themen 23
D Prozente werden falsch berechnet Java Basics - Anfänger-Themen 8
F for Schleife zählt falsch Java Basics - Anfänger-Themen 6
S Variable wird falsch gesetzt Java Basics - Anfänger-Themen 5
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
D Aktuelles Datum wird falsch ausgegeben Java Basics - Anfänger-Themen 2
B Drucken: Default Paper von Drucker? Mein Drucker druckt falsch Java Basics - Anfänger-Themen 3
D Matritzenmultiplikation berechnet Werte falsch Java Basics - Anfänger-Themen 9
J ireport Designer / CSV / Sonderzeichen was läuft falsch Java Basics - Anfänger-Themen 7
W Was ist bei folgendem Code falsch? Java Basics - Anfänger-Themen 5
C Array wird falsch befüllt? Java Basics - Anfänger-Themen 7
L Methoden Histogramm, Methode berechnet falsch. Java Basics - Anfänger-Themen 7
Silvascus Was mache ich falsch? Java Basics - Anfänger-Themen 15
L Variable an andere Klasse weitergeben - Was mache ich falsch? Java Basics - Anfänger-Themen 2
C Variablen if Anweisung falsch gesetzt Java Basics - Anfänger-Themen 4
J Java rechnet -0.94 + 0.01 falsch Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben