[ seka1 @ 23.05.2008. 16:22 ] @
Pozdrav! Imam problem oko jednog zadatka. treba napraviti program koji iscrtava segment krive linije od pozicije na koju je korisnik kliknuo mišem na prozoru pa sve do naredne pozicije na koju korisnik klikne na prozoru. Dok korisnik ne klikne drugi put mišem segment linije po prozoru prati kretnje mišem (kraj segmenta raste i pomjera se prema poziciji miša na prozoru, a pocetak je fiksiran na poziciji gdje je korisnik prvi put kliknuo mišem). Kada korisnik klikne drugi put na prozor, segment linije je fiksiran, a novi segment linije sada prati kretnje miša do naradnog klika. Iscrtavanje krive linije završava se dvostrukim klikom miša na prozoru. Pored toga, na ekranu se nalazi i taster koji služi za brisanje iscrtane linije na ekranu, kako bi se moglo zapoceti sa iscrtavanjem nove linije. Imam neko rjesenje , ali umjesto da iscrtava ove linije koje trebaju , linija rotira kako se mis krece. Ako moze ko da mi pokaze sta u kodu treba promjeniti i kako da bi iscrtavalo kako treba, ili ako treba sta izbaciti. HVALA Evo koda : package problem1; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.JPanel; public class Problem1 { public static void main(String[] args) { MojFrame prozor = new MojFrame(); prozor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); prozor.setVisible(true); } } //Novi frame class MojFrame extends JFrame { Toolkit kit = Toolkit.getDefaultToolkit(); Dimension ekran = kit.getScreenSize(); public MojFrame() { setLocation(ekran.width/4,ekran.height/4); setSize(ekran.width/2,ekran.height/2); setTitle("Linija"); //Dodajemo panel na frame //Uzimamo contentPane na koji ćemo staviti panel Container contentPane = getContentPane(); //sada kreiramo panel MojPanel panel = new MojPanel(); //Dodajemo ga u contentPane contentPane.add(panel); } } class MojPanel extends JPanel { private Line2D linija; private double duzina; private double pocetna_x, pocetna_y; private double krajnja_x, krajnja_y; int slucaj = 0; public void paintComponent(Graphics g) { super.paintComponent(g);//Crta prvo sama sebe Graphics2D g2 = (Graphics2D) g; Toolkit kit = Toolkit.getDefaultToolkit(); Dimension sredina = kit.getScreenSize(); pocetna_x = sredina.width/4; pocetna_y = sredina.height/4; if(slucaj==1) g2.draw(linija); } public MojPanel() { //Kreirajmo jedno dugme ImageIcon Ikona = new ImageIcon("Nova linija.gif"); JButton linija = new JButton("Nova linija",Ikona); //Dodajemo ga na panel setLayout(new BorderLayout()); JPanel panel = new JPanel(); panel.add(linija); add(panel,BorderLayout.SOUTH); //Kreiramo slušače addMouseListener(new MouseHandler()); addMouseMotionListener(new MouseMover()); } //Osluškivač za tipke miša private class MouseHandler implements MouseListener { public void mouseClicked(MouseEvent arg0) { krajnja_x=arg0.getX(); krajnja_y=arg0.getY(); slucaj = 1; duzina = Math.sqrt(Math.pow(krajnja_x-pocetna_x,2)+Math.pow(krajnja_y-pocetna_y,2)); linija = new Line2D.Double(pocetna_x,pocetna_y,krajnja_x,krajnja_y); } public void mouseEntered(MouseEvent arg0) { } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { repaint(); } } //Osluškivač pokreta miša private class MouseMover implements MouseMotionListener { public void mouseDragged(MouseEvent arg0) { repaint(); } public void mouseMoved(MouseEvent arg0) { double trenutna_x=arg0.getX(); double trenutna_y=arg0.getY(); double beta = Math.atan2(trenutna_x-pocetna_x,trenutna_y-pocetna_y); krajnja_y=duzina*Math.cos(beta)+pocetna_y; krajnja_x=duzina*Math.sin(beta)+pocetna_x; linija = new Line2D.Double(pocetna_x,pocetna_y,krajnja_x,krajnja_y); repaint(); } } } |