Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Пример 5.3.

Читайте также:
  1. V. Примерный образец теста, применяемого для промежуточной аттестации
  2. Web-контейнер, Servlet, JSP. Структура, назначение и пример сервлета или JSP.
  3. А вот чрезмерное употребление алкоголя действительно вызывает гинекомастию. Примерно четверо из 10 хронических алкоголиков имеют это заболевание в той или иной стадии развития.
  4. А. Здравомыслов.Примерно два года тому назад.
  5. Ая основа – Хаджури не видит разницы между нововведенцем, призывающим к своему нововведению, и не призывающим, и пример в этом он взял с Махмуда Хаддада.
  6. Будьте хорошим примером для своих детей
  7. Быть примером
  8. В наших примерах мы ни разу не рассматривали конструкторы классов, поэтому при создании экземпляров наших классов вызывался конструктор класса object.
  9. В приведенном примере нарушение синтезов пространственного гнозиса и обусловливает ряд следствий, что можно представить схематично.
  10. В только что приведенном вами примере с под­брасыванием монеты компьютерное моделирование

 

package SimpleCutAndPaste.java;import java.awt.*;import java.awt.event.*;import java.awt.datatransfer.*; /** * реализация копирования и вставки**/public class SimpleCutAndPaste extends Frame implements ClipboardOwner{ /** метод main создает и отображает окно */ public static void main(String[] args) { Frame f = new SimpleCutAndPaste(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); f.pack(); f.setVisible(true); } /** текстовое поле, хранящее вырезанный или вставленный текст */ TextField field; /** * конструктор, создающий простой GUI, и события * ActionListener нажатия кнопок **/ public SimpleCutAndPaste() { super("SimpleCutAndPaste"); // заголовок окна this.setFont(new Font("SansSerif", Font.PLAIN, 18)); // шрифт // кнопка Cut Button copy = new Button("Copy"); copy.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { copy(); } }); this.add(copy, "West"); // кнопка Paste Button paste = new Button("Paste"); paste.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { paste(); } }); this.add(paste, "East"); // текстовое поле, с которым они работают field = new TextField(); this.add(field, "North"); } /** * метод принимает содержимое текстового поля, создает объект * StringSelection для предоставления строк и помещает * StringSelection в буфер **/ public void copy() { // получаем текущее значение String s = field.getText(); // создание объекта StringSelection. // StringSelection реализует интерфейсы // Transferable и ClipboardOwner. StringSelection ss = new StringSelection(s); // объект StringSelection содержится в буфере this.getToolkit().getSystemClipboard().setContents(ss, this); // выделить текст буфера. field.selectAll(); } /** * метод распознает строки и списки файлов. **/ public void paste() { // буфер обмена Clipboard c = this.getToolkit().getSystemClipboard(); // содержимое буфера в виде объекта Transferable Transferable t = c.getContents(this); // тип данных в буфере try { if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) { // отображение строки String s = (String) t.getTransferData(DataFlavor.stringFlavor); field.setText(s); } else if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { // список файлов java.util.List files = (java.util.List) t.getTransferData(DataFlavor.javaFileListFlavor); java.io.File file = (java.io.File)files.get(0); field.setText(file.getName()); } } // звуковой сигнал. catch (Exception e) { this.getToolkit().beep(); } } /** * метод интерфейса ClipboardOwner при помещении в буфер **/ public void lostOwnership(Clipboard c, Transferable t) { // снятие выделения текста, так как работа с буфером завершена field.select(0,0); }}

 

Пример 5.4. Определение инфраструктуры передачи данных для перемещения данных.

 

package Scribble.java;import java.awt.*;import java.awt.geom.*;import java.awt.datatransfer.*;import java.io.Serializable;import java.util.StringTokenizer; /** * класс, реализующий рисование с помощью линий при помощи методов* moveto(),lineto(). * * класс реализует интерфейс Shape Java2D * * и интерфейс Transferable который легко реализует вырезание и вставку**/public class Scribble implements Shape, Transferable, Serializable, Cloneable { protected double[] points = new double[64]; // данные рисунка protected int numPoints = 0; // количество пикселов double maxX = Double.NEGATIVE_INFINITY; // прямоугольник double maxY = Double.NEGATIVE_INFINITY; double minX = Double.POSITIVE_INFINITY; double minY = Double.POSITIVE_INFINITY; public void moveto(double x, double y) { if (numPoints + 3 > points.length) reallocate(); // начало линии points[numPoints++] = Double.NaN; // конец lineto(x, y); } /** * добавление точки (x,y) к концу **/ public void lineto(double x, double y) { if (numPoints + 2 > points.length) reallocate(); points[numPoints++] = x; points[numPoints++] = y; // не выходит ли линия за пределы прямоугольника if (x > maxX) maxX = x; if (x < minX) minX = x; if (y > maxY) maxY = y; if (y < minY) minY = y; } /** * добавить рисунок **/ public void append(Scribble s) { int n = numPoints + s.numPoints; double[] newpoints = new double[n]; System.arraycopy(points, 0, newpoints, 0, numPoints); System.arraycopy(s.points, 0, newpoints, numPoints, s.numPoints); points = newpoints; numPoints = n; minX = Math.min(minX, s.minX); maxX = Math.max(maxX, s.maxX); minY = Math.min(minY, s.minY); maxY = Math.max(maxY, s.maxY); } /** * привязка точек рисунка к координатам x,y **/ public void translate(double x, double y) { for(int i = 0; i < numPoints; i++) { if (Double.isNaN(points[i])) continue; points[i++] += x; points[i] += y; } minX += x; maxX += x; minY += y; maxY += y; } /** внутренний метод для выделения места в массиве */ protected void reallocate() { double[] newpoints = new double[points.length * 2]; System.arraycopy(points, 0, newpoints, 0, numPoints); points = newpoints; } /** копирование объекта Scribble и е8го массива данных */ public Object clone() { try { Scribble s = (Scribble) super.clone(); // копирование полей s.points = (double[]) points.clone(); // копирование массива return s; } catch (CloneNotSupportedException e) { // ошибка return this; } } /** конвертирование рисунка в текстовый формат */ public String toString() { StringBuffer b = new StringBuffer(); for(int i = 0; i < numPoints; i++) { if (Double.isNaN(points[i])) { b.append("m "); } else { b.append(points[i]); b.append(' '); } } return b.toString(); } /** * создание нового Scribble и инициализация его * методом toString() **/ public static Scribble parse(String s) throws NumberFormatException { StringTokenizer st = new StringTokenizer(s); Scribble scribble = new Scribble(); while(st.hasMoreTokens()) { String t = st.nextToken(); if (t.charAt(0) == 'm') { scribble.moveto(Double.parseDouble(st.nextToken()), Double.parseDouble(st.nextToken())); } else { scribble.lineto(Double.parseDouble(t), Double.parseDouble(st.nextToken())); } } return scribble; } // ========= методы интерфейса Shape ======== /** прямоугольник Shape */ public Rectangle getBounds() { return new Rectangle((int)(minX-0.5f), (int)(minY-0.5f), (int)(maxX-minX+0.5f), (int)(maxY-minY+0.5f)); } /** прямоугольник объекта Shape */ public Rectangle2D getBounds2D() { return new Rectangle2D.Double(minX, minY, maxX-minX, maxY-minY); } /** фигура является незамкнутой */ public boolean contains(Point2D p) { return false; } public boolean contains(Rectangle2D r) { return false; } public boolean contains(double x, double y) { return false; } public boolean contains(double x, double y, double w, double h) { return false; } /** * контроль пересечения прямоугольника **/ public boolean intersects(Rectangle2D r) { if (numPoints < 4) return false; int i = 0; double x1, y1, x2 = 0.0, y2 = 0.0; while(i < numPoints) { if (Double.isNaN(points[i])) { // если новая линия i++; // пропускаем NaN x2 = points[i++]; y2 = points[i++]; } else { x1 = x2; y1 = y2; x2 = points[i++]; y2 = points[i++]; if (r.intersectsLine(x1, y1, x2, y2)) return true; } } return false; } /** проверка на пересечение */ public boolean intersects(double x, double y, double w, double h){ return intersects(new Rectangle2D.Double(x,y,w,h)); } /** * объект PathIterator, сообщающий Java2D как отображать рисунок **/ public PathIterator getPathIterator(AffineTransform at) { return new ScribbleIterator(at); } /** * возврат PathIterator без кривых. **/ public PathIterator getPathIterator(AffineTransform at, double flatness) { return getPathIterator(at); } /** * возврат PathIterator для описания формы рисунка * координаты Since и Scribble **/ public class ScribbleIterator implements PathIterator { protected int i = 0; // позиция в массиве protected AffineTransform transform; public ScribbleIterator(AffineTransform transform) { this.transform = transform; } /** внутренняя и внешняя части формы */ public int getWindingRule() { return PathIterator.WIND_NON_ZERO; } /** конец рисунка */ public boolean isDone() { return i >= numPoints; } /** следующий отрезок */ public void next() { if (Double.isNaN(points[i])) i += 3; else i += 2; } /** * координаты текущей точки в массиве float **/ public int currentSegment(float[] coords) { int retval; if (Double.isNaN(points[i])) { // If its a moveto coords[0] = (float)points[i+1]; coords[1] = (float)points[i+2]; retval = SEG_MOVETO; } else { coords[0] = (float)points[i]; coords[1] = (float)points[i+1]; retval = SEG_LINETO; } // преобразование для всех координат if (transform!= null) transform.transform(coords, 0, coords, 0,1); return retval; } /** * координаты точек и линий в массиве double **/ public int currentSegment(double[] coords) { int retval; if (Double.isNaN(points[i])) { coords[0] = points[i+1]; coords[1] = points[i+2]; retval = SEG_MOVETO; } else { coords[0] = points[i]; coords[1] = points[i+1]; retval = SEG_LINETO; } if (transform!= null) transform.transform(coords, 0, coords, 0,1); return retval; } } //====== методы интерфейса Transferable ===== // список форматов public static DataFlavor scribbleDataFlavor = new DataFlavor(Scribble.class, "Scribble"); // проверка поддержки формата public static DataFlavor[] supportedFlavors = { scribbleDataFlavor, DataFlavor.stringFlavor }; /** возврат данных рисунка в запрашиваемом формате */ public DataFlavor[] getTransferDataFlavors() { return (DataFlavor[]) supportedFlavors.clone(); } /** исключение формата */ public boolean isDataFlavorSupported(DataFlavor flavor) { return (flavor.equals(scribbleDataFlavor) || flavor.equals(DataFlavor.stringFlavor)); } /** * возврат данных рисунка или * исключение **/ public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { if (flavor.equals(scribbleDataFlavor)) { return this; } else if (flavor.equals(DataFlavor.stringFlavor)) { return toString(); } else throw new UnsupportedFlavorException(flavor); }}

 

Пример 5.5. Вырезание и вставка рисунков.

 

package ScribbleCutAndPaste.java;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.awt.datatransfer.*; // Clipboard, Transferable, DataFlavor, etc. /** * компонент, позволяющий рисовать, вырезать и вставлять * фрагменты через буфер обмена. **/public class ScribbleCutAndPaste extends JComponent implements ActionListener, ClipboardOwner { Stroke linestyle = new BasicStroke(3.0f); // рисуем толстыми линиями Scribble scribble = new Scribble(); // сохраняем рисунок Scribble selection; // вырезаем JPopupMenu popup; // меню вырезания и вставки public ScribbleCutAndPaste() { // Create the popup menu. String[] labels = new String[] { "Clear", "Cut", "Copy", "Paste" }; String[] commands = new String[] { "clear", "cut", "copy", "paste" }; popup = new JPopupMenu(); // создание меню popup.setLabel("Edit"); for(int i = 0; i < labels.length; i++) { JMenuItem mi = new JMenuItem(labels[i]); // элемент меню mi.setActionCommand(commands[i]); // события меню mi.addActionListener(this); // слушатель события popup.add(mi); // добавляем элемент к меню } // регистрируем меню в компоненте this.add(popup); // добавление слушателей событий addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (e.isPopupTrigger()) popup.show((Component)e.getSource(), e.getX(), e.getY()); else scribble.moveto(e.getX(), e.getY()); // начало линии } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { // если не кнопка мыши 1, то игнорируем if ((e.getModifiers() & InputEvent.BUTTON1_MASK) == 0) return; scribble.lineto(e.getX(), e.getY()); // добавляем линию repaint(); } }); } /** * рисуем компонент. * объект Scribble реализует Shape. **/ public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setStroke(linestyle); // толщина линий g2.draw(scribble); // рисуем } /** метод интерфейса ActionListener вызываемый всплывающим меню */ public void actionPerformed(ActionEvent event) { String command = event.getActionCommand(); if (command.equals("clear")) clear(); else if (command.equals("cut")) cut(); else if (command.equals("copy")) copy(); else if (command.equals("paste")) paste(); } /** очистка рисунка всплывающим меню */ void clear() { scribble = new Scribble(); // пустой рисунок repaint(); // перерисовка } /** * копию рисунка помещаем в буфер * Scribble реализует интерфейс Transferable * это происходит через всплывающее меню **/ public void copy() { // обращение к буферу Clipboard c = this.getToolkit().getSystemClipboard(); // копируем Scribble для буфера selection = (Scribble) scribble.clone(); // посылаем в буфер c.setContents(selection, // что поместить this); // кого проинформировать } /** * команда cut похожа на copy action, кроме того, что рисунок удаляется **/ public void cut() { copy(); clear(); } /** * вызов метода через всплывающее меню. * запрос Transferable в буфере. * сравнение Transferable и рисунка по формату с выдачей сигнала * при их несовпадении. **/ public void paste() { Clipboard c = this.getToolkit().getSystemClipboard(); // буфер Transferable t = c.getContents(this); // его содержимое // объект Scribble Scribble pastedScribble = null; try { pastedScribble = (Scribble)t.getTransferData(Scribble.scribbleDataFlavor); } catch (Exception e) { // UnsupportedFlavor, NullPointer, etc. // запрос строки try { String s = (String)t.getTransferData(DataFlavor.stringFlavor); // строку преобразовать в объект Scribble pastedScribble = Scribble.parse(s); } catch (Exception e2) { // UnsupportedFlavor, NumberFormat, etc. // завершение работы this.getToolkit().beep(); // ошибка вставки return; } } // получение объекта Scribble и его перерисовка scribble.append(pastedScribble); repaint(); } /** * метод интерфейса ClipboardOwner. * ClipboardOwner копирует Scribble в буфер. **/ public void lostOwnership(Clipboard c, Transferable t) { selection = null; } /** метод main для представления разработанного класса */ public static void main(String[] args) { JFrame frame = new JFrame("ScribbleCutAndPaste"); ScribbleCutAndPaste s = new ScribbleCutAndPaste(); frame.getContentPane().add(s, BorderLayout.CENTER); frame.setSize(400, 400); frame.setVisible(true); }}

 

Пример 5.6. Перетаскивание (drag-and-drop) рисунков с помощью интерфейса java.awt.dnd, основанного на интерфейсе DataFlavor и Transferable.

 

package ScribbleDragAndDrop.java;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.awt.datatransfer.*; // Clipboard, Transferable, DataFlavor и др.import java.awt.dnd.*;import java.util.ArrayList; /** * Компонент работает в двух режимах. Врежиме рисования * позволяет чертить линии мышью. В режиме перетаскивания * перемещает мышью рисунок. В любом режиме принимает рисунки, * перетаскиваемые из других приложений. **/public class ScribbleDragAndDrop extends JComponent implements DragGestureListener, // начало перетаскивания DragSourceListener, // события источника перетаскивания DropTargetListener, // события приемника перетаскивания MouseListener, // обработчик кнопок мыши MouseMotionListener // обработчик перетаскивания мышью{ ArrayList scribbles = new ArrayList(); // список рисуемых объектов Scribbles Scribble currentScribble; // рисуемый объект Scribble beingDragged; // перетаскиваемый объект DragSource dragSource; // главный объект перетаскивания boolean dragMode; // рисование или перемещение // используемые константы static final int LINEWIDTH = 3; static final BasicStroke linestyle = new BasicStroke(LINEWIDTH); static final Border normalBorder = new BevelBorder(BevelBorder.LOWERED); static final Border dropBorder = new BevelBorder(BevelBorder.RAISED); /** конструктор для перетаскивания */ public ScribbleDragAndDrop() { // используем рамку по умолчанию, // размер которой изменится при перетаскивании. setBorder(normalBorder); // регистрация слушателей обработки рисования addMouseListener(this); addMouseMotionListener(this); // создание объектов DragSource и DragGestureRecognizer для // регистрации событий перетаскивания. DragGestureRecognizer // сообщит DragGestureListener о действиях пользователя dragSource = DragSource.getDefaultDragSource(); dragSource.createDefaultDragGestureRecognizer(this, // компонент DnDConstants.ACTION_COPY_OR_MOVE, // тип this);// слушатель // настройка DropTarget обработки событий перетаскивания // по передаче уведомлений объекту DropTargetListener DropTarget dropTarget = new DropTarget(this, // компонент this); // слушатель this.setDropTarget(dropTarget); // передача сообщений } /** * компонент отображает себя отрисовкой Scribble объекта. **/ public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setStroke(linestyle); // ширина линий int numScribbles = scribbles.size(); for(int i = 0; i < numScribbles; i++) { Scribble s = (Scribble)scribbles.get(i); g2.draw(s); // рисуем } } public void setDragMode(boolean dragMode) { this.dragMode = dragMode; } public boolean getDragMode() { return dragMode; } /** * следующие 4 метода интерфейса MouseListener * он обрабатывает события нажатия унопок мыши **/ public void mousePressed(MouseEvent e) { if (dragMode) return; currentScribble = new Scribble(); scribbles.add(currentScribble); currentScribble.moveto(e.getX(), e.getY()); } public void mouseReleased(MouseEvent e) {} public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} /** * этот метод и mouseMoved() относятся к интерфейсу MouseMotionListener * он добавляет новые точки и перерисовывает **/ public void mouseDragged(MouseEvent e) { if (dragMode) return; currentScribble.lineto(e.getX(), e.getY()); repaint(); } public void mouseMoved(MouseEvent e) {} /** * этот метод реализует интерфейс DragGestureListener. вызывается * когда DragGestureRecognizer начинает перетаскивание **/ public void dragGestureRecognized(DragGestureEvent e) { // запрет перетаскивания в режиме рисования if (!dragMode) return; // место начала перетаскивания MouseEvent inputEvent = (MouseEvent) e.getTriggerEvent(); int x = inputEvent.getX(); int y = inputEvent.getY(); // над каким рисунком нажата кнопка мыши // отмечаем прямоугольником и организуем цикл по рисунку. Rectangle r = new Rectangle (x-LINEWIDTH, y-LINEWIDTH, LINEWIDTH*2, LINEWIDTH*2); int numScribbles = scribbles.size(); for(int i = 0; i < numScribbles; i++) { // проход по циклу Scribble s = (Scribble) scribbles.get(i); if (s.intersects(r)) { // начало перетаскивания // и перемещения // запоминаем фрагмент beingDragged = s; // создаем копию для перетаскивания Scribble dragScribble = (Scribble) s.clone(); // установка точки отсчета на месте нажатия кнопки. dragScribble.translate(-x, -y); // установка формы указателя мыши Cursor cursor; switch(e.getDragAction()) { case DnDConstants.ACTION_COPY: cursor = DragSource.DefaultCopyDrop; break; case DnDConstants.ACTION_MOVE: cursor = DragSource.DefaultMoveDrop; break; default: return; // поддержка перемещения и копирования } // перемещение изображения вместе с указателем if (dragSource.isDragImageSupported()) { Rectangle scribbleBox = dragScribble.getBounds(); Image dragImage = this.createImage(scribbleBox.width, scribbleBox.height); Graphics2D g = (Graphics2D)dragImage.getGraphics(); g.setColor(new Color(0,0,0,0)); // прозрачный фон g.fillRect(0, 0, scribbleBox.width, scribbleBox.height); g.setColor(Color.black); g.setStroke(linestyle); g.translate(-scribbleBox.x, -scribbleBox.y); g.draw(dragScribble); Point hotspot = new Point(-scribbleBox.x, -scribbleBox.y); // перетаскивание с изображением. e.startDrag(cursor, dragImage, hotspot, dragScribble,this); } else { // или без него e.startDrag(cursor, dragScribble,this); } // завершение поиска после начала перетаскивания return; } } } /** * 5 методов интерфейса DragSourceListener * метод dragDropEnd() отпускание объекта перетаскивания * при успешном перемещении удаление рисунка из списка **/ public void dragDropEnd(DragSourceDropEvent e) { if (!e.getDropSuccess()) return; int action = e.getDropAction(); if (action == DnDConstants.ACTION_MOVE) { scribbles.remove(beingDragged); beingDragged = null; repaint(); } } // методы интерфейса DragSourceListener. // используются для графических эффектов при перетаскивании public void dragEnter(DragSourceDragEvent e) {} public void dragExit(DragSourceEvent e) {} public void dropActionChanged(DragSourceDragEvent e) {} public void dragOver(DragSourceDragEvent e) {} // 5 методов интерфейса DropTargetListener /** * при идентификации перетаскиваемых данных вызывается acceptDrag() * для подготовки к приему объекта с изменением размеров рамки **/ public void dragEnter(DropTargetDragEvent e) { if (e.isDataFlavorSupported(Scribble.scribbleDataFlavor) || e.isDataFlavorSupported(DataFlavor.stringFlavor)) { e.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); this.setBorder(dropBorder); } } /** восстановление рамки */ public void dragExit(DropTargetEvent e) { this.setBorder(normalBorder); } /** * основной метод интерфейса DropTargetListener. вызывается * когда пользователь отпускает объект. **/ public void drop(DropTargetDropEvent e) { this.setBorder(normalBorder); // восстановление рамки // контроль формата данных. // либо принимаем либо блокируем прием данных. if (e.isDataFlavorSupported(Scribble.scribbleDataFlavor) || e.isDataFlavorSupported(DataFlavor.stringFlavor)) { e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); } else { e.rejectDrop(); return; } // объект принят и данные извлекаются из // объекта Transferable. Transferable t = e.getTransferable(); // сохранить данные Scribble droppedScribble; // место хранения объекта Scribble // получаем данные объекта try { droppedScribble = (Scribble) t.getTransferData(Scribble.scribbleDataFlavor); } catch (Exception ex) { // неизвестный формат, запрет // тогда получение объекта в виде строки с анализом try { String s = (String) t.getTransferData(DataFlavor.stringFlavor); droppedScribble = Scribble.parse(s); } catch(Exception ex2) { // сообщение о неудачном перемещении e.dropComplete(false); return; } } // получение объекта Scribble Point p = e.getLocation(); // место отпускания объекта droppedScribble.translate(p.getX(), p.getY()); // перемещение scribbles.add(droppedScribble); // в список отображения repaint(); // перерисовка e.dropComplete(true); // успех перемещения } // неиспользуемые методы интерфейса DropTargetListener public void dragOver(DropTargetDragEvent e) {} public void dropActionChanged(DropTargetDragEvent e) {} /** * метод main(). Создание приложения для отображения * операций рисования и перетаскивания. **/ public static void main(String[] args) { // создание окна с панелью для рисования JFrame frame = new JFrame("ScribbleDragAndDrop"); final ScribbleDragAndDrop scribblePane = new ScribbleDragAndDrop(); frame.getContentPane().add(scribblePane, BorderLayout.CENTER); // создание 2 кнопок переключения режимов JToolBar toolbar = new JToolBar(); ButtonGroup group = new ButtonGroup(); JToggleButton draw = new JToggleButton("Рисование"); JToggleButton drag = new JToggleButton("Перетаскивание"); draw.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scribblePane.setDragMode(false); } }); drag.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scribblePane.setDragMode(true); } }); group.add(draw); group.add(drag); toolbar.add(draw); toolbar.add(drag); frame.getContentPane().add(toolbar, BorderLayout.NORTH); // начало режима рисования draw.setSelected(true); scribblePane.setDragMode(false); // показ окна frame.setSize(400, 400); frame.setVisible(true); }}

 




Дата добавления: 2015-09-11; просмотров: 27 | Поможем написать вашу работу | Нарушение авторских прав

Пример 2.18. | Пример 2.19. | Пример 2.20. | Пример 2.21. | Пример 2.26. | Пример 3.1. | Пример 3.4. Обработка изображений. | Пример 3.5. Улучшенная анимация. | Пример 3.6. | Пример 4.1. |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав