You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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();
}
}