Графіка і кнопки Swing
import java.awt.Color;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
public class Paint extends JPanel {
private MouseHandler mouseHandler = new MouseHandler();
private Point p1 = new Point(100, 200);
private Point p2 = new Point(300, 200);
private Point p3 = new Point(200, 100);
private int mouse_point = -1;
private boolean drawing;
public Paint() {
this.setPreferredSize(new Dimension(640, 480));
this.addMouseListener(mouseHandler);
this.addMouseMotionListener(mouseHandler);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.red);
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke(8,
BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
g.drawLine(p1.x, p1.y, p2.x, p2.y);
g.drawLine(p1.x, p1.y, p3.x, p3.y);
g.drawLine(p2.x, p2.y, p3.x, p3.y);
}
private class MouseHandler extends MouseAdapter {
public void mousePressed(MouseEvent e) {
drawing = true;
double near=1000;
double mas[]=new double[3];
mas[0] = Math.hypot(p1.x-e.getX(), p1.getY()-e.getY());
mas[1] = Math.hypot(p2.x-e.getX(), p2.getY()-e.getY());
mas[2] = Math.hypot(p3.x-e.getX(), p3.getY()-e.getY());
System.out.println(mas[0]);
System.out.println(mas[1]);
System.out.println(mas[2]);
for (int i = 0; i < mas.length; i++) {
if(mas[i]<near){near = mas[i]; mouse_point = i+1; }
}
System.out.println(mouse_point);
System.out.println();
if(mouse_point == 1){p1 = e.getPoint(); }
if(mouse_point == 2){p2 = e.getPoint(); }
if(mouse_point == 3){p3 = e.getPoint(); }
repaint();
}
public void mouseReleased(MouseEvent e) {
drawing = false;
if(mouse_point == 1){p1 = e.getPoint(); }
if(mouse_point == 2){p2 = e.getPoint(); }
if(mouse_point == 3){p3 = e.getPoint(); }
repaint();
}
public void mouseDragged(MouseEvent e) {
if (drawing) {
if(mouse_point == 1){p1 = e.getPoint(); }
if(mouse_point == 2){p2 = e.getPoint(); }
if(mouse_point == 3){p3 = e.getPoint(); }
repaint();
}
}
}
private class ControlPanel extends JPanel {
private static final int DELTA = 10;
public ControlPanel() {
this.add(new MoveButton("\u2190", KeyEvent.VK_LEFT, -DELTA, 0));
this.add(new MoveButton("\u2191", KeyEvent.VK_UP, 0, -DELTA));
this.add(new MoveButton("\u2192", KeyEvent.VK_RIGHT, DELTA, 0));
this.add(new MoveButton("\u2193", KeyEvent.VK_DOWN, 0, DELTA));
}
private class MoveButton extends JButton {
KeyStroke k;
int dx, dy;
public MoveButton(String name, int code,
final int dx, final int dy) {
super(name);
this.k = KeyStroke.getKeyStroke(code, 0);
this.dx = dx;
this.dy = dy;
this.setAction(new AbstractAction(this.getText()) {
@Override
public void actionPerformed(ActionEvent e) {
Paint.this.p1.translate(dx, dy);
Paint.this.p2.translate(dx, dy);
Paint.this.p3.translate(dx, dy);
Paint.this.repaint();
}
});
ControlPanel.this.getInputMap(WHEN_IN_FOCUSED_WINDOW)
.put(k, k.toString());
ControlPanel.this.getActionMap()
.put(k.toString(), new AbstractAction() {
public void actionPerformed(ActionEvent e) {
MoveButton.this.doClick();
}
});
}
}
}
private void display() {
JFrame f = new JFrame("Trykutnik");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.add(new ControlPanel(), BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new Paint().display();
}
});
}
}