我正在尝试在JLabel的图标上显示网格(以及其他项目),但我无法确定根据其布局获取图标坐标的方法。
附注:由于我需要鼠标支持,所以我不能使用setIcon()在图标内部进行绘制操作。
附注:由于我需要鼠标支持,所以我不能使用setIcon()在图标内部进行绘制操作。
public class ExtendedJLabel extends JLabel implements MouseMotionListener
{
private final int GRID_STEP = 16;
public ExtendedJLabel()
{
super();
setOpaque(true);
setBackground(UIManager.getColor("controlShadow");
addMouseMotionListener(this);
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(icon == null)
return;
// Icon Origin
int ox = ...;
int oy = ...;
// Draw grid
g.setColor(UIManager.getColor("controlShadow"));
for(int row = 0; row < getIcon().getIconHeight() / GRID_STEP; row++)
g.drawLine(ox, oy + row * GRID_STEP, ox + getIcon().getIconWidth(), oy + row * GRID_STEP);
for(int col = 0; col < getIcon().getIconWidth() / GRID_STEP; col++)
g.drawLine(ox + col * GRID_STEP, oy, ox + col * GRID_STEP, oy + getIcon().getIconHeight());
}
@Override
public void mouseMoved(MouseEvent me)
{
// ...
}
@Override
public void mouseDragged(MouseEvent me)
{
// ...
}
}