PDA

View Full Version : سوال: کار با موس در اپلت



vmohammadi
پنج شنبه 01 بهمن 1388, 09:48 صبح
با سلام

به دنبال برنامه ای در جاوا هستم(به صورت اپلت)که وقتی اشاره گر موس وارد کادر اپلت شد
بشه روی صفحه به دنبال حرکت موس خط بکشه(مثل اینکه در MS PAINT هستید و با مداد وقتی چپ کلیک کردید روی صفحه درگ می کنید)

اگه از سروران کسی می تونه ممنون میشم.

با تشکر

ehsan.s1987
چهارشنبه 07 بهمن 1388, 04:00 صبح
یک listener بری MouseMotion و یکی برای Mouse تعربف کن (MouseListener و MouseMotionListener)
با وقوع رخداد mouseEntered() یک بولین را true کن.
با وقوع رخداد mouseMoved() در صورتیکه مقدار بولین true بود مختصات x,y را توسط گرافیک بکش.
حله....:لبخند:

jlover
چهارشنبه 07 بهمن 1388, 17:47 عصر
من نتونستم تو Applet اینکار رو بکنم،سعی کردم از کلاس Canvas یه زیرکلاس بگیرم و همه ی کارای نقاشی رو بهش بسپارم و بعد در init() یه نمونه ساخته و بهش اضافه کنم،اما نمیدونم چرا در عمل موقع اجرا ، canvas بهش اضافه نمیشه !
اما در swing مشکلی نیست.برنامه ی زیر دقیقا همین کار رو میکنه(البته در نسخه ی اصلیش که مال کتاب جاوا،جاوا،جاوا هست از JPanel استفاده شده و یه برنامه ی کاربردیه...)
یه مسئله ی دیگه ای هم که هست اینه که موقع تغییر اندازه ی پنجره - ()update - چیزایی که کشیدین ( ترسیمات ) از بین میرن ( البته در برنامه کاربردیش یه طورای دیگه ای این مشکل هست

import java.awt.*;
import java.awt.event.*;

public class Painting extends javax.swing.JApplet implements MouseListener,
MouseMotionListener{
private final int WIDTH = 300, HEIGHT = 300; // Initial size
private final int LEFT = 10; // Reference points
private final int TOP = 10;
private final int BORDER = 30;

private final Color backColor = Color.gray; // Background color
private final Color lineColor = Color.red; // Outline color

private Point mouse = new Point(); // Mouse's current location

public void init(){
setSize(WIDTH,HEIGHT);
addMouseListener(this);
addMouseMotionListener(this);
}

public void paint(Graphics g) {
// add(new PopupMenu("c"));
Dimension d = getSize();
g.setColor(lineColor);
g.fillRect(0, 0, LEFT, TOP); // The clear rectangle
g.drawRect(LEFT, TOP, d.width - BORDER, d.height - BORDER); // The drawing area
g.drawString("Drag to draw; Click the red rectangle to clear.", LEFT, d.height - 5);
g.setColor(Color.black); // Set drawing color

// If the mouse is within the drawing area, draw a dot
if ((mouse.x > LEFT) && (mouse.x < LEFT + d.width - BORDER)
&& (mouse.y > TOP) && (mouse.y < TOP + d.height - BORDER))
g.fillRect(mouse.x, mouse.y, 3, 3);

// If the mouse is clicked at top left corner clear the drawing
if ((mouse.x < LEFT) && (mouse.y < TOP))
g.clearRect(LEFT + 1, TOP + 1, d.width - BORDER - 1, d.height - BORDER - 1);
} // paintComponent()

/* Mouse Handling Interfaces: MouseMotionListener and MouseListener */

/**
* mouseDragged() handles the mouse drag event. In this case it merely
* gets the mouse's location and repaints the window.
*/
public void mouseDragged(MouseEvent e) { // When the mouse is dragged (mouse motion listener)
mouse = e.getPoint(); // get its coordinates
repaint();
}

/**
* mouseClick() handles mouse click events. In this case it just
* gets the mouse's location and repaints the window.
*/
public void mouseClicked(MouseEvent e) { // When mouse is clicked (mouse listener)
mouse = e.getPoint(); // get its coordinates
repaint();
}
public void mouseEntered(MouseEvent e) { } // These five interface methods are not used
public void mouseExited(MouseEvent e) { } // but must be defined.
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e){ }
public void mouseMoved(MouseEvent e) { }
} // Paint