正直に言うと、あなたがこれを行う可能性がありますいくつかの方法があります。私が考えることができる最も簡単な方法の1つは、2D Graphics Shape
APIを利用することです。
次の例は、単に簡単にするためにArc2D
を使用しますが、(あなたはそれが複雑に取得したい場合)一般的な概念は、同様にPath
ベースの形状のために働く必要があり
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Arc2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private Arc2D segment;
private Arc2D selected = null;
public TestPane() {
segment = new Arc2D.Double(0, 0, 190, 190, -11.75, 23.5, Arc2D.PIE);
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
Point p = e.getPoint();
p.translate(-5, -5);
selected = null;
if (segment.contains(e.getPoint())) {
selected = segment;
}
repaint();
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.translate(5, 5);
if (selected != null) {
g2d.setColor(Color.BLUE);
g2d.fill(selected);
}
g2d.setColor(Color.RED);
g2d.draw(segment);
g2d.dispose();
}
}
}
見てくださいWorking with Geometry詳細については、
あなたはパネル自体にリスナーを登録し、クリックされた部門うまくする必要があります。 –