5 import java.awt.FlowLayout;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
9 import javax.swing.JCheckBox;
10 import javax.swing.JPanel;
11 import javax.swing.event.ChangeEvent;
12 import javax.swing.event.ChangeListener;
14 import java.awt.Color;
15 import java.awt.Cursor;
16 import java.awt.Graphics;
17 import java.awt.Graphics2D;
18 import java.awt.RenderingHints;
19 import java.awt.event.MouseEvent;
20 import java.awt.event.MouseListener;
21 import java.awt.event.MouseMotionListener;
22 import java.awt.event.MouseWheelEvent;
23 import java.awt.event.MouseWheelListener;
24 import java.util.Iterator;
26 import javax.swing.BorderFactory;
27 import javax.swing.JButton;
28 import javax.swing.JPanel;
37 MouseMotionListener, MouseWheelListener,
38 container.IGeomContainerListener
41 private double scale = 0.1;
45 private Graphics2D graphics = null;
48 private boolean axes =
true;
49 private boolean createSel =
true;
66 this.createSel = createSel;
71 this.gObjects = gObjects;
72 setBackground(Color.WHITE);
76 this.setBorder(BorderFactory.createLineBorder(Color.GRAY, 5));
77 this.addMouseListener(
this);
78 this.addMouseMotionListener(
this);
79 this.addMouseWheelListener(
this);
80 this.gObjects.addListener(
this);
90 Graphics2D g2d = (Graphics2D) g;
93 x0 = this.getWidth() / 2;
94 y0 = this.getHeight() / 2;
97 super.paintComponent(g2d);
99 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
100 RenderingHints.VALUE_ANTIALIAS_ON);
105 g.setColor(Color.LIGHT_GRAY);
107 for (
int i = x0; i < getWidth(); i += step)
109 g.drawLine(i, 0, i, getHeight());
111 for (
int i =
y0; i < getHeight(); i += step)
113 g.drawLine(0, i, getWidth(), i);
115 for (
int i = x0; i >= 0; i -= step)
117 g.drawLine(i, 0, i, getHeight());
119 for (
int i =
y0; i >= 0; i -= step)
121 g.drawLine(0, i, getWidth(), i);
124 g.setColor(Color.BLACK);
125 g.drawLine(0,
y0, getWidth(),
y0);
126 g.drawLine(x0, 0, x0, getHeight());
135 return (
int) (realX / scale + x0);
140 return (
int) ( -realY / scale +
y0);
145 return ((canvasX - x0) * scale);
150 return ((
y0 - canvasY) * scale);
159 GObject objHere = gObjects.in(arg0.getX(), arg0.getY(),
this);
160 if (objHere == null || !objHere.getClass().equals(Point.class))
163 p.view().highLight();
176 highLighted.view().select();
179 highLighted.view().highLight();
184 this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
186 this.setCursor(Cursor.getDefaultCursor());
211 this.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
217 if (this.getCursor().equals(
218 Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)))
219 this.setCursor(Cursor.getDefaultCursor());
229 x0 += arg0.getX() - prevx;
245 highLighted.view().deselect();
249 boolean found =
false;
250 Iterator<GObject> iterator = gObjects.iterator();
251 while (iterator.hasNext())
253 GObject gobj = iterator.next();
254 if (gobj.
in(arg0.getX(), arg0.getY(),
this) && !found)
258 gobj.view().highLight();
265 this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
267 this.setCursor(Cursor.getDefaultCursor());
279 if (scale > 0.01 && scale < 0.2)
295 this.setScale(this.getScale() - arg0.getWheelRotation() * k);
303 private JCheckBox axes;
304 private JCheckBox sel;
308 this.setLayout(
new FlowLayout(FlowLayout.LEFT));
309 axes =
new JCheckBox(
"Axes");
310 axes.getModel().setSelected(
true);
312 axes.addChangeListener(
this);
313 sel =
new JCheckBox(
"Selected Points");
314 sel.getModel().setSelected(
true);
315 sel.addChangeListener(
this);
322 if (arg0.getSource().equals(axes))
324 if (axes.getModel().isSelected())
329 if (arg0.getSource().equals(sel))
331 if (sel.getModel().isSelected())
332 gcs.setCreateSel(
true);
334 gcs.setCreateSel(
false);
GCSControl(GCoordSystem gcs)
void setScale(double scale)
Kласс для хранения графических объектов
abstract boolean in(int canvasX, int canvasY, GCoordSystem gcs)
Абстракная функция определяющая принадлежность точки объекту. Переопределяется в подклассах - конкрет...
void setCreateSel(boolean createSel)
void paintComponent(Graphics g)
void stateChanged(ChangeEvent arg0)
void mouseEntered(MouseEvent arg0)
double realX(int canvasX)
void mousePressed(MouseEvent arg0)
Точка. Определяется двумя числами - координами в декартовой системе координат.
void mouseClicked(MouseEvent arg0)
void setAxes(boolean axes)
void mouseExited(MouseEvent arg0)
GCoordSystem(GeomContainer gObjects, boolean axes)
void mouseReleased(MouseEvent arg0)
Главный класс отображения. У пользователя нет необходимости его использовать напрямую.
void mouseMoved(MouseEvent arg0)
double realY(int canvasY)
int canvasX(double realX)
void mouseDragged(MouseEvent arg0)
Абстрактный суперкласс для всех графических объектов
void onDataChanged(GeomContainer source)
void mouseWheelMoved(MouseWheelEvent arg0)
int canvasY(double realY)