JLabel (또는 이미지가있는 JComponent)을 그 위치가 왼쪽 상단 구석이 아닌 이미지의 가운데가되는 방식으로 그립니다.중심의 X, Y 좌표로 JLabel 그리기
나는 fillOval
과 drawImage
을 사용하려고 시도했습니다. 나는 16x16의 위치를 가진 객체의 모델을 가지고 있고, 스프라이트가 0x0에서 32x32까지 확장되고 16x16에서 48x48로 확장되기를 바란다.
이미지에서 재개되었습니다. getLocation()은 모델의 위치 (즉, 가운데)를 지정해야하며 페인트하려고하면 왼쪽 상단 모서리가 아닌 가운데에 x, y 좌표로 페인트해야합니다.
아이디어가 있으십니까? 내 코드의
일부 비트 :
@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);
}
lable 내 그림 대신 lable을 배치하는 것이 좋습니다. 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 –