2012-05-30 8 views
5

// Próbuję nauczyć się rysować obiekty w języku Java. W tym się poprawiam, ale gdy dostaję obraz na ekranie, mam problem z manipulowaniem nim. Liczby, które wstawiam, nie mają żadnego sensu w sposobie, w jaki kształtują się kształty. Przynajmniej mi nie. W algebrze, jeśli zwiększysz liczbę na osi x, to po prawej stronie i jeśli zwiększysz liczbę na osi Y, wzrośnie ona. To nie dzieje się tutaj. Czy ktoś może mi wyjaśnić, jak to działa? Wciąż jestem nowicjuszem w Javie, więc im więcej wyjaśnień i szczegółów, tym lepiej. Próbuję poświęcić kilka godzin dziennie na moje lato, aby nauczyć się java i czasami robi się trochę frustrujące. Każda pomoc jest bardzo doceniana.Używanie płaszczyzny współrzędnych w JFrame

+3

W Javie (0,0) znajduje się w lewym górnym rogu. – Jeffrey

+3

Ten [link] (http://docs.oracle.com/javase/1.4.2/docs/guide/2d/spec/j2d-intro.html#wp61857) może pomóc. – bacchus

+3

Ten [przykład] (http://stackoverflow.com/a/9373195/230513) omawia przekształcanie między kartezjańskim a współrzędnymi ekranu. – trashgod

Odpowiedz

6

Oto początek od TOP LEFT SIDE ekranu, tak jak zwiększyć wartość X, będzie poruszać się w kierunku RIGHT SIDE, choć, jak zwiększyć wartość Y, można przenieść DOWNWARDSCo-ordinates. Oto mały przykład Programu, abyś mógł to lepiej zrozumieć, po prostu kliknij go w dowolnym miejscu.

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

Och, fajne. To jest świetne. –

+0

@MartinMarino: Thankyou i KEEP SMILING :-) –

+0

Kod mówi, że nie może znaleźć bazy symboli klasy symboli. Błędy są nieparzystym płótnem "DrawingBase"; canvas = new "DrawingBase"(); Cytaty mają pokazywać, skąd pochodzi rzeczywisty błąd. Doceniam pomoc, ale nie mam pojęcia, jak to naprawić. Czy mogę uzyskać trochę więcej pomocy? –