2013-12-17 5 views
0

나는 자바에서 트래픽 흐름 네트워크에 대한 시뮬레이션을 코딩 봤는데, 다음과 같이 그래픽으로 네트워크를 모델링하도록되어 클래스 보인다 : 내 main() 함수에서Java로 그래픽 클래스를 호출하려면 어떻게해야합니까?

public class Map extends JPanel { 
BufferedImage truck1; 

public Map() throws IOException{ 
    truck1 = ImageIO.read(getClass().getResource("Truck.png")); 
} 

protected void paintcomponent (Graphics g) { 
super.paintComponent(g); 

g.drawImage(truck1, 50, 100, 300, 300, this); 
} 
} 

, 오브젝트 I 인스턴스를 함수의 맨 처음에 다음과 같이 내가 프로그램을 실행할 때

Frame F1 = new Frame(); 
F1.setLayout(new FlowLayout()); 
F1.setSize(500,500); 
F1.setVisible(true); 
Map map = new Map(); 
map.setOpaque(true); 
F1.add(map); 
F1.setVisible(true); 

그러나, 유일한 출력은 정확히 창 상단 중간에 약간 어두운 회색 작은 사각형 빈 창입니다. 프로젝트에 Truck.png을 추가했는데 왜 제대로 표시되지 않아야하는지 알 수 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

클래스 맵에 대한 가져 오기는 어떤 모양입니까? 다른 구현체가 아닌 Map 클래스를 사용하고 있는지 확인하십시오. –

답변

2
  1. 프레임이 보이기 전에 구성 요소를 프레임에 추가해야합니다.
  2. 프레임에 FlowLayout을 사용하고 있습니다. FlowLayout는 모든 구성 요소의 기본 크기를 고려합니다. Map 클래스에는 기본 크기가 없으므로 크기는 기본적으로 (0, 0)이므로 페인트 할 것이 없습니다. Map 클래스의 getPreferredSize() 메서드를 재정 의하여 구성 요소의 적절한 크기를 반환합니다.
+0

고마워요. 그것은 변화하는 것 같습니다. 그러나 이제는 어두운 회색 영역 (패널 영역이라고 가정 함)은 훨씬 더 큽니다 (map.setPreferredSize (새로운 Dimension (500,500));로 준 치수에 따라) 그러나 이미지의 출력은 여전히 ​​없습니다 지도 클래스에서 선언되었습니다. 어떤 아이디어? – Martin

+0

1) 이미지는 위치 (0, 0)에 그려야합니다. 2) 바람직한 크기는 임의의 값이 아니라 이미지의 크기 여야합니다. 3) 프레임이 아닌 JFrame을 사용해야합니다. 이들 중 하나가 효과가 있는지 여부를 모릅니다. 그렇지 않다면 이미지가 읽혀지고 있는지 확인해야합니다. 또한 사용자 정의 페인팅을 수행하는 이유는 무엇입니까? JLabel에 아이콘을 표시하고 프레임에 레이블을 추가 할 수 있습니다. – camickr

관련 문제