Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лр7_Меню, модальные окна

.pdf
Скачиваний:
13
Добавлен:
30.04.2015
Размер:
159.61 Кб
Скачать

18.Добавьте проверку идентификатора события нажатия первой кнопки мыши, и реализуйте его обработку так, чтобы запоминались координаты курсора мыши

else if (e.getID() == MouseEvent.MOUSE_PRESSED){ lastX = e.getX(); lastY = e.getY(); }

else super.processMouseEvent(e); }

19.Добавьте метод processMouseMotionEvent

public void processMouseMotionEvent(MouseEvent e)

20.Добавьте проверку идентификатора события протаскивания мыши, и реализуйте его обработку так, так чтобы вычерчивались отрезки прямых между текущим и предыдущим положением курсора мыши

if (e.getID()== MouseEvent.MOUSE_DRAGGED){ Graphics g = getGraphics();

g.setColor(currColor) ;

g.drawLine(lastX, lastY, e.getX(), e.getY()); lastX = e.getX(); lastY = e.getY();

}

else super.processMouseMotionEvent(e);

}

}

В итоге вы должны получить такой текст программы:

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

public class PopupMenuScribble extends Frame{ public PopupMenuScribble(String s){

super (s) ;

ScrollPane pane = new ScrollPane(); pane.setSize(300, 300);

add(pane, BorderLayout.CENTER); Scribble scr = new Scribble(this, 500, 500); pane.add(scr);

pack (); setVisible(true);

addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0);

}

});

}

public static void main(String[] args){

new PopupMenuScribble(" \"Рисовалка\" с всплывающим меню");

}

}

class Scribble extends Component implements ActionListener{ protected int lastX, lastY, w, h;

protected Color currColor = Color.black; protected Frame f;

protected PopupMenu c;

public Scribble(Frame frame, int width, int height){ f = frame; w = width; h = height; enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK);

c = new PopupMenu("Цвет") ; add(c);

MenuItem clear = new MenuItem("Очистить", new MenuShortcut(KeyEvent.VK_D)); MenuItem red = new MenuItem("Красный"); MenuItem green = new MenuItem("Зеленый"); MenuItem blue = new MenuItem("Синий"); MenuItem black = new MenuItem("Черный"); c.add(red); c.add(green); c.add(blue); c.add(black); c.addSeparator(); c.add(clear); red.addActionListener(this); green.addActionListener(this); blue.addActionListener(this); black.addActionListener(this); clear.addActionListener(this);

}

public Dimension getPreferredSize() {return new Dimension(w, h);

}

public void actionPerformed(ActionEvent event){ String s = event.getActionCommand();

if (s.equals("Очистить")) repaint();

else if (s.equals("Красный")) currColor = Color.red; else if (s.equals("Зеленый")) currColor = Color.green; else if (s.equals("Синий")) currColor = Color.blue; else if (s.equals("Черный")) currColor = Color.black;

}

public void processMouseEvent(MouseEvent e){ if (e.isPopupTrigger()) c.show(e.getComponent(), e.getX(), e.getY());

else if (e.getID() == MouseEvent.MOUSE_PRESSED){ lastX = e.getX(); lastY = e.getY(); }

else super.processMouseEvent(e); }

public void processMouseMotionEvent(MouseEvent e){ if (e.getID()== MouseEvent.MOUSE_DRAGGED){ Graphics g = getGraphics();

g.setColor(currColor) ;

g.drawLine(lastX, lastY, e.getX(), e.getY()); lastX = e.getX(); lastY = e.getY();

}

else super.processMouseMotionEvent(e);

}

}

21.Запустите приложение, у вас должно появиться такое окно

22.Проверьте работу программы, нарисуйте что-нибудь

Контрольное задание

Добавьте в программу «Рисовалка» строку меню

Вопросы для контроля:

1.Что позволяет создавать иерархически вложенные подменю?

2.Что нужно сделать для установки строки меню в контейнере Frame?

3.Как создать пункты меню?

4.Как пункт меню прижать к правому краю строки меню?

5.Как отделить группы меню чертой?

6.Как создать команды меню для выбора?

7.Как назначить действия командам меню?

8.Как назначить пунктам меню «горячие» клавиши?

9.Что такое контейнер FileDialog?

10.Какие конструкторы есть в классе FileDialog?

11.Как можно установить начальный каталог для поиска файла и имя файла? 12.Как присоединить всплывающее меню к компоненту?

Можно ли присоединить всплывающее меню к нескольким компонентам? 13.Как можно использовать всплывающее меню с несколькими

компонентами?

14.Какие еще методы и свойства, кроме унаследованных, есть в классе

PopupMenu?