2012-05-30 8 views
5

// Ich versuche zu lernen, wie man Objekte in Java zeichnet. Ich werde besser darin, aber sobald ich ein Bild auf dem Bildschirm habe, habe ich Probleme, es zu manipulieren. Die Zahlen, die ich eingegeben habe, ergeben keinen Sinn für die Formen. Zumindest für mich nicht. Wenn Sie in der Algebra eine Zahl auf der X-Achse erhöhen, wird sie nach rechts verschoben, und wenn Sie eine Zahl auf der Y-Achse erhöhen, wird sie erhöht. Das ist nicht was hier passiert. Kann mir jemand erklären, wie das geht? Ich bin immer noch neu in Java, also je mehr Erklärungen und Details, desto besser. Ich versuche ein paar Stunden in meinem Sommer zu verbringen um Java zu lernen und manchmal wird es ein wenig frustrierend. Jede Hilfe wird sehr geschätzt.Verwendung der Koordinatenebene im JFrame

+3

In Java befindet sich (0,0) in der oberen linken Ecke. – Jeffrey

+3

Diese [link] (http://docs.oracle.com/javase/1.4.2/docs/guide/2d/spec/j2d-intro.html#wp61857) könnte helfen. – bacchus

+3

Dieses [Beispiel] (http://stackoverflow.com/a/9373195/230513) beschreibt die Umwandlung zwischen kartesischen und Bildschirmkoordinaten. – trashgod

Antwort

6

Hier ist der Co-ordinates Start aus der TOP LEFT SIDE des Bildschirms, wie Sie Wert von X erhöhen, werden Sie in Richtung RIGHT SIDE bewegen, obwohl, wie Sie den Wert Y erhöhen, werden Sie DOWNWARDS bewegen. Hier ist ein kleines Beispielprogramm, damit Sie das etwas besser verstehen, klicken Sie einfach irgendwo drauf.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class DrawingExample 
{ 
    private int x; 
    private int y; 
    private String text; 
    private DrawingBase canvas; 

    private void displayGUI() 
    { 
     JFrame frame = new JFrame("Drawing Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     canvas = new DrawingBase(); 
     canvas.addMouseListener(new MouseAdapter() 
     { 
      public void mouseClicked(MouseEvent me) 
      { 
       text = "X : " + me.getX() + " Y : " + me.getY(); 
       x = me.getX(); 
       y = me.getY(); 
       canvas.setValues(text, x, y); 
      } 
     }); 

     frame.setContentPane(canvas); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new DrawingExample().displayGUI(); 
      } 
     }); 
    } 
} 

class DrawingBase extends JPanel 
{ 
    private String clickedAt = ""; 
    private int x = 0; 
    private int y = 0; 

    public void setValues(String text, int x, int y) 
    { 
     clickedAt = text; 
     this.x = x; 
     this.y = y; 
     repaint(); 
    } 

    public Dimension getPreferredSize() 
    { 
     return (new Dimension(500, 400)); 
    } 

    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.drawString(clickedAt, x, y); 
    } 
} 
+0

Oh cool. Das ist toll. –

+0

@MartinMarino: Danke und LÄCHELN LÄCHELN :-) –

+0

Der Code sagt, dass es keine Symbolklasse DrawingBase finden kann. Die Fehler sind private "DrawingBase" -Leinwand; canvas = new "DrawingBase"(); Die Zitate sollen zeigen, woher der eigentliche Fehler kommt. Ich schätze die Hilfe, aber ich habe keine Ahnung, wie ich das beheben kann. Könnte ich ein wenig mehr Hilfe bekommen? –

Verwandte Themen