在Java中,處理Line2D事件的常用方法是使用MouseListener和MouseMotionListener接口。以下是一個簡單的示例,演示了如何實現Line2D事件處理:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Line2DEventHandlingExample {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGUI());
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("Line2D Event Handling Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
Line2D line = new Line2D.Double(50, 50, 350, 350);
ShapePanel panel = new ShapePanel(line);
frame.add(panel);
frame.setVisible(true);
}
}
class ShapePanel extends JPanel {
private Line2D line;
public ShapePanel(Line2D line) {
this.line = line;
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (line.contains(e.getPoint())) {
System.out.println("Line clicked!");
} else {
System.out.println("Line not clicked.");
}
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
System.out.println("Mouse dragged.");
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(new BasicStroke(2));
g2d.draw(line);
}
}
在這個示例中,我們創建了一個名為Line2DEventHandlingExample
的主類,它包含一個簡單的Swing應用程序。我們創建了一個名為ShapePanel
的自定義面板,它接受一個Line2D
對象作為參數。在ShapePanel
類中,我們添加了MouseListener
和MouseMotionListener
接口的實現,以便在單擊線條和處理鼠標拖動事件時執行相應的操作。
當用戶單擊線條時,mouseClicked
方法將被調用。我們使用Line2D.contains()
方法檢查鼠標點擊位置是否在線條上。如果是,則輸出"Line clicked!“,否則輸出"Line not clicked.”。
當用戶拖動鼠標時,mouseDragged
方法將被調用。在這個示例中,我們只是簡單地輸出"Mouse dragged.",但你可以根據需要執行其他操作。