我正在尝试绘制一个JLabel(或带有图像的JComponent),使其位置是图像的中心,而不是左上角。
我尝试使用fillOval
和drawImage
无济于事。我有一个物体的模型,其位置为16x16,我希望精灵从0x0到32x32,而不是16x16到48x48。
在图像中恢复:getLocation()应该给我模型的位置(即中心),当我尝试绘制时,它应该用x,y坐标绘制在中心,而不是在左上角。< / p>
有什么想法吗?
我的一些代码:JPanel尝试在更新时显示精灵:
@Override
public void update(Observable o, Object arg) { //Is ran everytime WorldControler simulates a tick
this.removeAll();
paintCreatures(arg);
this.revalidate();
this.repaint();
}
/**
*
* @param arg : The LinkedList that notifyObserver passes through in WorldControler
*/
private void paintCreatures(Object arg){
LinkedList<Creature> cList = (LinkedList<Creature>) arg;
for(Creature c : cList){
ViewCreature vc = new ViewCreature(c,8);
this.add(vc);
vc.setVisible(true);
vc.setSize(8,8);
System.out.println(vc.getX() + " " + vc.getY());
}
}
我目前拥有的paintComponent:
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(img, this.getX()+size/2, this.getY()+size/2, null);
}
答案 0 :(得分:0)
我最终解决问题的方法是在setLocation方法中偏移Location。这不是最美丽的答案,但现在它将完成这项工作。
@Override
public void setLocation(int x, int y) {
super.setLocation(x-(size/2), y-(size/2));
}
@Override
public void setLocation(Point p) {
super.setLocation((int)p.getX()-size/2,(int)p.getY()-size/2);
}
如果您有任何改进此答案的建议,请自行评论或回答。 没有必要用这个覆盖paintComponent。