EDIT : 첫 번째 질문이 풀리고 Roberto Attias 's answer을 참조하고 댓글을 읽을 수 있습니다. 아직도 두 번째 문제가 있습니다.AWT를 사용하여 자바에서 이미지 그리기
Java에서 작은 2D 게임을해야하며 AWT를 가능한 한 많이 사용하고 싶습니다. (꼭 필요한 경우가 아니면 SWING도 Java2D도 필요하지 않습니다.)
나는 창을 가지고 있으며 그 위에 이미지를 그릴 수 있지만 두 가지 문제가 있습니다. 먼저 두 개 이상의 이미지를 그릴 수 없습니다. 사실 디버그시에 내 테스트 중 일부는 내 프로그램이 내 두 이미지를 삭제하고 첫 이미지 만 다시 그려야한다는 것을 알 수 있습니다. 열린
public class AwtManager {
private Frame frame;
private Panel panel;
public AwtManager(){
frame = new Frame("a");
frame.setSize(800,600);
frame.setLocation(100, 100);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEnvent){
System.exit(0);
}
});
panel = new Panel();
// here I tried to setBounds to solve my second issue, it didn't work
//panel.setBounds(0, 0, 800, 600);
frame.add(panel);
frame.setVisible(true);
}
이 부분 : 둘째, 다시 그려진다 첫 번째 이미지는 내가 그런 일을 지금은 (는 약간 왼쪽 아래에)
가해야 좌표에 있지 내 창문과 작품 꽤 멋지지만 내 두 번째 문제는 내 프레임/패널의 경계에 의해 발생하는 것 같습니다 그래서 여기에 할 몇 changement있을 수 있습니다.
public void showMytwoImagesFFS(ArrayList<ImageComponent> images){
for (int i = 0; i < images.size(); i++) {
panel.add(images.get(i);
//And this is where I'm lost
}
// or here maybe
frame.setVisible(true);
}
}
이 두 번째 부분에서 나는 Component.paint (g), Component.update (g)의 모든 조합을 시도 Component.repaint(), Component.setVisible (참) 내가 생각할 수있다.
내 객체 ImageComponent은 단순히 이것이다 :
public class ImageComponent extends Component {
private static final long serialVersionUID = 1L;
private BufferedImage img;
private int x;
private int y;
public ImageComponent(String path,int x, int y){
try{
img = ImageIO.read(new File(path));
this.x = x;
this.y = y;
}
catch (IOException e){
e.printStackTrace();
}
}
이 함수는 getPreferredSize() 지옥 같은 날 방해, 그것은 ImageComponent의 추천 사이즈를 반환해야하지만 분명히 내 프레임/패널의 크기를 넣어야 할 그렇지 않으면 작동하지 않습니다.
public Dimension getPreferredSize(){
return new Dimension(800,600);
}
그리고 마지막으로 내 페인트, 업데이트 칠은 :
public void paint(Graphics g){
g.drawImage(img, x, y,null);
}
public void update(Graphics g){
super.update(g);
}
public void repaint(){
this.getGraphics().drawImage(img, x, y, null);
}
}
내가보기 엔 그들이하지만 매우 어려운 주제에 문서를 찾을해야하는지 등 그 세 모습 이해하는 의심.
그래서, 그 문제를 도와 주시겠습니까 방법에 의해 당신은 Component.setVisible (부울) 어떻게 작동하는지 알고 싶습니다 디버그 모드에서,이 함수는 날 느슨한 일부 머리카락을 만들었 기 때문에 알고 싶습니다.
편집 :
여기내가 두 개의 빨간색 사각형을 요구 것을 알고 내 방 창문의 스크린 샷입니다 (이 있습니다 이미지를하지 사각형), 하나 0,0, (200)에서 다른, 200
편집 2 : 다음은 완벽하게 실행 가능한 코드 (내 생각)입니다 :
import java.awt.*;
import java.util.*;
import java.awt.event.*;
public class AwtManager {
private Frame frame;
private Panel panel;
public static void main(String args[]) {
new AwtManager();
ArrayList<ImageComponent> images = new ArrayList<>();
images.add(new ImageComponent("myimage.jpg", 0, 0));
images.add(new ImageComponent("myimage.jpg", 200, 200));
showMytwoImagesFFS(images);
}
public AwtManager(){
frame = new Frame("a");
frame.setSize(800,600);
frame.setLocation(100, 100);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEnvent){
System.exit(0);
}
});
panel = new Panel();
frame.add(panel);
frame.setVisible(true);
}
public void showMytwoImagesFFS(ArrayList<ImageComponent> images){
for (int i = 0; i < images.size(); i++) {
panel.add(images.get(i));
}
frame.setVisible(true);
}
}
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
public class ImageComponent extends Component {
private static final long serialVersionUID = 1L;
private BufferedImage img;
private int x;
private int y;
public ImageComponent(String path,int x, int y){
try{
img = ImageIO.read(new File(path));
this.x = x;
this.y = y;
}
catch (IOException e){
e.printStackTrace();
}
}
public Dimension getPreferredSize(){
return new Dimension(800,600);
}
public void paint(Graphics g){
g.drawImage(img, x, y,null);
}
public void update(Graphics g){
super.update(g);
}
public void repaint(){
this.getGraphics().drawImage(img, x, y, null);
}
}
"첫 번째 질문이 해결되었습니다." 당신은 모든 존경심을 가지고 패자입니다. – gpasch
죄송합니다, 제가 요점을 줄 수 있다는 것을 잊어 버렸습니다. 슬프게도 제가 줄 수없는 "받아 들인 응답"에 초점을 맞추 었습니다. 여전히 문제가 있음을 알고 있습니다. 어쨌든, 당신은 내가 SO (그 신성한 포인트 중 단지 11 개)에 대한 질문을하는 것이 아주 새로운 것으로 나타났습니다. 그리고 "패배자"라고 부르지 않았습니다. – Krowk
명백하게 나는 지적 할 수 없다. 나는 그 중 15 명을 먼저 필요로한다. 어떻게해야 하는가? – Krowk