Пример обработки события с использованием реализации интерфейса.
import java.awt.event.*;import java.applet.Applet;import java.awt.Graphics; public class SimpleClick extends Applet implements MouseListener { StringBuffer buffer; public void init() { addMouseListener(this); buffer = new StringBuffer(); addItem("initializing... "); } public void start() { addItem("starting... "); } public void stop() { addItem("stopping... "); } public void destroy() { addItem("preparing for unloading..."); } void addItem(String newWord) { System.out.println(newWord); buffer.append(newWord); repaint(); } public void paint(Graphics g) { g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); g.drawString(buffer.toString(), 5, 15); }// Остальные методы интерфейса реализуются как пустые методы public void mouseEntered(MouseEvent event) { } public void mouseExited(MouseEvent event) { } public void mousePressed(MouseEvent event) { } public void mouseReleased(MouseEvent event) { } public void mouseClicked(MouseEvent event) { addItem("click! "); }}
Пример обработки события с использованием вложенных классов, наследующих классы-адаптеры.
public class Scribble2 extends Applet { int last_x, last_y; public void init() { this.addMouseListener(new MyMouseAdapter()); this.addMouseMotionListener(new MyMouseMotionAdapter()); Button b = new Button("Clear"); b.addActionListener(new MyActionEventListener()); this.add(b); }class MyMouseAdapter extends MouseAdapter { public void mousePressed(MouseEvent e) { last_x = e.getX(); last_y = e.getY(); }}class MyMouseMotionAdapter extends MouseMotionAdapter { public void mouseDragged(MouseEvent e) { Graphics g = getGraphics(); int x = e.getX(), y = e.getY(); g.setColor(Color.black); g.drawLine(last_x, last_y, x, y); last_x = x; last_y = y; }}class MyActionEventListener implements ActionListener { public void actionPerformed(ActionEvent e) { Graphics g = getGraphics(); g.setColor(getBackground()); g.fillRect(0, 0, getSize().width, getSize().height); } }}Пример обработки события с использованием вложенного анонимного класса.
public class Scribble3 extends Applet { int last_x, last_y; public void init() { this.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { last_x = e.getX(); last_y = e.getY(); } }); this.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { Graphics g = getGraphics(); int x = e.getX(), y = e.getY(); g.setColor(Color.black); g.drawLine(last_x, last_y, x, y); last_x = x; last_y = y; } }); Button b = new Button("Clear"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Graphics g = getGraphics(); g.setColor(getBackground()); g.fillRect(0, 0, getSize().width, getSize().height); } }); this.add(b); }}Рассмотрим апплет двойного назначения LinesDraw, в окне которого можно рисовать прямые линии при помощи мыши. Для того чтобы нарисовать в окне апплета линию, пользователь должен установить курсор в начальную точку, нажать клавишу мыши и затем, не отпуская ее, переместить курсор в конечную точку. После отпускания клавиши координаты линии должны сохраняться апплетом в массиве, после чего будет происходить перерисовка апплета. Для того чтобы стереть содержимое окна апплета, необходимо сделать двойной щелчок в окне. При этом из массива координат должны будут удалены все элементы.
|
|
Пример 2.2. Рисование в окне
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
public class DrawLines extends JApplet {
|
|
int xDown, yDown; // координаты нажатия клавиши
int xPrev, yPrev; // предыдущие координаты конца линии
Vector lines; // массив координат линий
public void init() {
lines = new Vector();
MouseListener ml = new MouseAdapter(){
public void mousePressed(MouseEvent e) {
xPrev = e.getX(); yPrev = e.getY();
}
public void mouseReleased(MouseEvent e) {
xDown = e.getX(); yDown = e.getY();
int k = e.getClickCount();
System.out.println(k);
if ( k < 2) {
Rectangle p=new Rectangle(xPrev, yPrev, xDown-xPrev, yDown-yPrev);
lines.addElement(p);
}
else lines.removeAllElements();
repaint(); }};
addMouseListener(ml);
}
public void paint(Graphics g) {
Dimension appSize = getSize();
g.setColor(Color.yellow);
g.fillRect(0,0,appSize.width, appSize.height);
g.setColor(Color.black);
int size = lines.size();
for ( int i = 0; i < size; i++ ) {
Rectangle p=(Rectangle)lines.elementAt(i);
g.drawLine(p.x, p.y, p.x+p.width, p.y+p.height);
}
}
public static void main(String[] args) {
JFrame frame = new JFrame ("Пример");
DrawLines appl = new DrawLines();
appl.init(); appl.start();
frame.getContentPane().add(appl);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 300);
frame.setVisible(true);
}
}
А теперь попробуем выполнить обработку событий при движении мыши. Просто добавим в метод init код:
MouseMotionListener mm = new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
xDown = e.getX(); yDown = e.getY();
Rectangle p=new Rectangle(xPrev,yPrev,xDown-xPrev, yDown-yPrev);
|
|
lines.addElement(p);
xPrev = xDown; yPrev = yDown;
repaint();
}
};
addMouseMotionListener(mm);
Рассмотрим апплет двойного назначения KeyCodes, в окне которого отображаются символы, соответствующие нажимаемым клавишам, код соответствующей клавиши и коды модификации. В процессе отображения новые строки должны появляться в верхней части окна, а старые сдвигаться вниз после отпускания клавиши (должна быть организована свертка в окне).
Дата добавления: 2018-04-15; просмотров: 269; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!