Я пытаюсь нарисовать JLabel (или JComponent с изображением) таким образом, чтобы его местоположение было центром изображения, а не левым верхним углом.Рисование JLabel с координатой X, Y центра
Я пытался использовать fillOval
и drawImage
безрезультатно. У меня есть модель объекта, которая имеет позицию 16x16, и я хочу, чтобы спрайт охватывал от 0x0 до 32x32, а не от 16x16 до 48x48.
Возобновление на изображении: getLocation() должен дать мне позицию модели (т. Е. Центр), и когда я пытаюсь рисовать, он должен рисовать координаты x, y в центре, а не в верхнем левом углу.
Любая идея?
Некоторые биты моего кода: 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);
}
Я бы порекомендовал позиционировать листок, а не изображение в листе. Это можно сделать с помощью FlowLayout https://docs.oracle.com/javase/tutorial/uiswing/layout/flow.html –
Поскольку я работаю с абсолютными позициями (это симулятор эволюции, поэтому существа должны двигаться пиксель за пикселем), в настоящее время я использую 'setLayout (null)'. Из того, что я читал, это единственный способ дать точную позицию на JPanel. Есть ли другой способ? – Docteur
, так что вы можете посмотреть здесь: http://www.developer.com/java/other/article.php/893471/Fun-with-Java-Sprite-Animation-Part-1.htm –