92 lines
2.6 KiB
Java
92 lines
2.6 KiB
Java
|
Draw or Delete lines from JPanel
|
||
|
|
||
|
import java.awt.*;
|
||
|
import java.awt.event.*;
|
||
|
import java.awt.geom.Line2D;
|
||
|
import javax.swing.*;
|
||
|
|
||
|
public class LineUnder extends JFrame
|
||
|
{
|
||
|
LinePanel linePanel = new LinePanel();
|
||
|
LineUnder()
|
||
|
{
|
||
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||
|
initContentPane();
|
||
|
pack();
|
||
|
setLocationRelativeTo(null);
|
||
|
setVisible(true);
|
||
|
}
|
||
|
private void initContentPane()
|
||
|
{
|
||
|
linePanel.line.setLine(0d, 0d, 300d, 300d);
|
||
|
getContentPane().add(linePanel);
|
||
|
}
|
||
|
|
||
|
class LinePanel extends JPanel
|
||
|
{
|
||
|
Point lineStart = new Point(0, 0);
|
||
|
Point lineEnd = new Point(0, 0);
|
||
|
Line2D line = new Line2D.Double(lineStart, lineEnd);
|
||
|
//width of line
|
||
|
private Stroke stroke = new BasicStroke(2.0f);
|
||
|
private LineListener lis = null;
|
||
|
LinePanel()
|
||
|
{
|
||
|
super();
|
||
|
addMouseListener(lis = new LineListener(this, line));
|
||
|
}
|
||
|
//draw and delete line
|
||
|
public void paintComponent(Graphics g)
|
||
|
{
|
||
|
super.paintComponent(g);
|
||
|
Graphics2D g2 = (Graphics2D) g;
|
||
|
g2.setStroke(stroke);
|
||
|
if (lis.deleteLine)
|
||
|
{
|
||
|
g2.setColor(getBackground());
|
||
|
lis.deleteLine = false;
|
||
|
}
|
||
|
else
|
||
|
g2.setColor(Color.RED);
|
||
|
//draw shape of line
|
||
|
g2.draw(line);
|
||
|
}
|
||
|
//define panel's size
|
||
|
|
||
|
public Dimension getPreferredSize()
|
||
|
{
|
||
|
return new Dimension(400, 350);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class LineListener extends MouseAdapter
|
||
|
{
|
||
|
private Line2D line = null;
|
||
|
private JComponent parent = null;
|
||
|
boolean deleteLine = false;
|
||
|
LineListener(JComponent parent, Line2D line)
|
||
|
{
|
||
|
this.parent = parent;
|
||
|
this.line = line;
|
||
|
}
|
||
|
public void mouseClicked(MouseEvent e)
|
||
|
{
|
||
|
Point p = e.getPoint();
|
||
|
//this does it!
|
||
|
if (line.ptSegDist(p) == 0.0)
|
||
|
{
|
||
|
System.out.println("Hit!");
|
||
|
deleteLine = true;
|
||
|
}
|
||
|
else
|
||
|
System.out.println("Point: " + p + "\nDistance: " + line.ptSegDist(p));
|
||
|
parent.repaint();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void main(String[] args)
|
||
|
{
|
||
|
new LineUnder();
|
||
|
}
|
||
|
}
|