Java - Grafika - Příklady (62.díl)

Napsal O webu (») 4. 10. 2008 v kategorii Programování, přečteno: 4175×
obrazky/java_logo.pngPříklad 2 Příklad ilustruje práci s rozhraními MouseListener, a MouseMotionListener.

Budeme vytvářet výběrovou množinu ve tvaru obdélníku (tj. ohradu), jejíž rozměry se budou měnit na základě polohy myši. Zamysleme se, při kterých událostech myši budeme provádět vykreslování ohrady. Po stisknutí tlačítka na myši zjistíme aktuální pozici kurzoru, ošetřujeme handler mousePressed(). Tlačítko myši držíme stále stisknuté, odečítáme polohu aktuální pozice kurzoru, tj. ošetřujeme metodu mouseDragged(), při které provádíme vykreslování obdélníka.

Po uvolnění tlačítka na myši (metoda mouseReleased()) nebudeme provádět žádnou akci. Ohrada na ploše zůstane až do dalšího zadávání. Souřadnice levého horního a pravého dolního rohu ohrady budeme ukládat do proměnných typu int.
Ve třídě main deklarujeme potřebné proměnné, vytvoříme JPanel, který umístíme na formulář. Kreslení bude probíhat ve třídě Draw, jejíž instanci také vytvoříme.
public class Main extends JFrame{
private int x1, y1, x2, y2;
private Draw d;
public Main(int width, int height) {
this.setSize(width, height);
this.setTitle("Ohrada");
this.setLayout(new GridLayout(1,1));
JPanel p=new JPanel();
62
p.setBackground(Color.WHITE);
p.setLayout(new BorderLayout());
d=new Draw();
p.add(d);
this.getContentPane().add(p);
this.setVisible(true);
...
}

Pro JPanel zaregistrujeme posluchače, použijeme dvě rozhraní: MouseListener a MouseMotionListener. Všechny jejich metody musí být předefnovány. Nás budou zajímat metody mousePressed() a mouseDragged(). V prvním handleru inicializujeme souřadnice levého horního a pravého dolního rohu tak, aby byly totožné, ve druhém handleru měníme souřadnice pouze pravého dolního rohu.
Pro získání polohy kurzoru použijeme metody getX() a getY(), které voláme pro parametry obou handlerů.
p.addMouseListener(new MouseListener()
{
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mousePressed(MouseEvent e)
{
x1=e.getX();
y1=e.getY();
x2=e.getX();
y2=e.getY();
d.setRectangle(x1,y1, x2,y2);
}
public void mouseReleased(MouseEvent e){}
public void mouseExited(MouseEvent e){}
});
p.addMouseMotionListener(new MouseMotionListener()
{
public void mouseDragged(MouseEvent e)
{
x2=e.getX();
y2=e.getY();
d.setRectangle(x1,y1, x2,y2);
repaint();
}
public void mouseMoved(MouseEvent e) {}
});
}

Vykreslení budeme prováděr v metodě paintComponent() třídy Draw. Hodnoty aktuálních souřadnice obou rohů jsou předávány metodou setRectangle().
public class Draw extends JComponent{
private int x1,y1, x2, y2;
public Draw() {
}
public void paintComponent(Graphics g)
{
g.setColor(Color.RED);
g.drawRect(x1,y1,x2-x1, y2-y1);
}
public void setRectangle(int x1, int y1,int x2, int y2)
{
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
}
}


Autor: Filip Koval
Štítky: Java
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel jedenáct a dvanáct