// Iseseisev koduylesanne // // Kui hiirega vajutatakse ekraanil oleva r00du sisse, siis saab // selle r00du asukohta muuta. Kui r00dust välja, siis tekib uus r00t. // // Virgo Vardja // import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JFrame; public class R00t extends JFrame implements MouseListener, MouseMotionListener { final int Kylg = 20; int X = 100; int Y = 100; int mX; int mY; public static boolean Pihtas = false; FreimiThread FreimiJoonistaja = new FreimiThread(this); // Tekitame freimi public R00t() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setResizable(false); addMouseListener(this); addMouseMotionListener(this); show(); FreimiJoonistaja.start(); } // Iga paint()i puhul joonistame uue rectangli. Kuna tegu on Swingiga, // siis pole meil tarvis muret tunda graafika vilkumise v6i koleduse // pa"rast -- Swing doublebuffereerib by default. public void paint(Graphics g) { g.clearRect(0, 0, 400, 300); g.drawRect(X, Y, Kylg, Kylg); } public static void main(String[] argumendid) { new R00t(); } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) { // Kui saame pihta ekraanil olevale ruudule, seame pysti mouseDragged() // jaoks vajaliku lipu if ((e.getX() >= X) && (e.getX() <= X + Kylg) && (e.getY() >= Y) && (e.getY() <= Y + Kylg)) { // mX ja mY na"itavad, kui kaugele ruudu vasakust ylemisest punktist meie // hiirekursor sattus mX = e.getX() - X; mY = e.getY() - Y; Pihtas = true; } // Vastasel juhul genereerime uue ruudu else { X = (int)(300 * Math.random()); Y = 20 + (int)(180 * Math.random()); repaint(); Pihtas = false; } } // Hiirenupu vabastamise puhul t6mbame aktiivsust na"itava lipu ja"lle vardast maha. public void mouseReleased(MouseEvent e) { Pihtas = false; } // Uurime va"lja, kuhu ruuduke sikutati, ja joonistame uue ruudu vastavasse kohta. // Saame seda teha eelpool paika seatud mX ja mY abil. Niiviisi joonistades ei // hyppa ruudu ylemine vasak nurk hiirekursori kylge. public void mouseDragged(MouseEvent e) { if (Pihtas) { X = e.getX() - mX; Y = e.getY() - mY; repaint(); } } public void mouseMoved(MouseEvent e) {} } // Threadi ylesandeks on imelise skrolliva titlebari joonistamine class FreimiThread extends Thread { String title = "Kui hiirega vajutatakse ekraanil oleva r00du sisse, siis saab selle r00du asukohta muuta. Kui r00dust välja, siis tekib uus r00t. "; JFrame F; // Paistab, et 55 ma"rgi pikkune titlebar on parajasti sobiv static int maxJ = 55; int i = 0; int j = maxJ; FreimiThread(JFrame f) { F = f; } public void run() { while (true) { // Kuni parempoolne indeks satub stringi sisse, tekitame tiitli substringist // vasakpoolsest indeksist parempoolse indeksini if (j <= title.length()) F.setTitle(title.substring(i, j)); // Kui parempoolne indeks satub stringi pikkusest yle, siis viime parempoolse // indeksi stringi algusesse ja koostame tiitliriba kahest osast -- vasakpoolsest // indeksist stringi l6puni ja stringi algusest parempoolse indeksini else F.setTitle( title.substring(i, title.length()) + title.substring(0, j - title.length())); i++; j++; // Kui ka vasakpoolne indeks la"heb yle stringi a"a"re, siis seame m6lemad // indeksid default-seisu -- ja k6ik hakkab ja"lle otsast pihta if (i > title.length()) { i = 0; j = maxJ; } // Et ilusat animatsiooni emuleerida, sleep()ime pisut. NB! Muuda numbrit // vastavalt enda a"rana"gemisele try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } // EOF