그래서 나는 이상한 소리가 들릴 때 이미지를 바꾸는이 것을 설정하려고합니다. 마우스가 내 이미지 위에 있는지를 알기 위해 이미 mouseListener를 설정했습니다. 나는 이미지 위치가 저장되어있는 변수를 가지고 있으며, 이미지가 덮혀있을 때 바뀐다. 내 페인트 명령을 실행하면 기본 이미지가 페인트되고 그 위에 마우스를 가져 가면 다시 페인트되지 않기 때문에 변경되지 않습니다. 어떻게하면 이미지 위치가 변경 될 때 다시 페인트 할 수 있도록 만들 수 있습니까? BTW mouseListener가 이미지와 다른 클래스에 있습니다.내 페인트 기능에서 무언가를 반복하는 방법은 무엇입니까?
내 이미지 :
private String settingsConfig = snake.settingsConfig;
settingsImage = new ImageIcon(getClass().getResource(settingsConfig));
settingsImage.paintIcon(this, g, 700, 23);
내 주요 클래스 (다른 클래스에서) 페인트 (그래픽 g)의
public class snake implements MouseListener{
public static int mouseX;
public static int mouseY;
public static String settingsConfig = "/assets/settings.png";
public static void main(String[] args) {
// JFrame
JFrame obj = new JFrame("Snake");
gameplay Gameplay = new gameplay();
obj.setBounds(10, 10, 905, 700);
obj.setBackground(Color.DARK_GRAY);
obj.setResizable(false);
obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
obj.add(Gameplay);
obj.setVisible(true);
obj.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
if(mouseX > 699 && mouseX < 761 && mouseY > 22 + 25 && mouseY < 54 + 25) {
settingsConfig = "/assets/settingshover.png";
}
else {
settingsConfig = "/assets/settings.png";
}
}
});
}
아주 작은 조각 (그림 방법은 다른 클래스에) :
public void paint (Graphics g) {
if(moves == 0) {
snakexlength[2] = 50;
snakexlength[1] = 75;
snakexlength[0] = 100;
snakeylength[2] = 100;
snakeylength[1] = 100;
snakeylength[0] = 100;
}
if(moves >= 1) {
playing = true;
}
// Draw title image border
g.setColor(Color.WHITE);
g.drawRect(24, 10, 851, 55);
// Draw the title image and settings
titleImage = new ImageIcon(getClass().getResource("/assets/snaketitle.jpg"));
titleImage.paintIcon(this, g, 25, 11);
settingsImage = new ImageIcon(getClass().getResource(settingsConfig));
settingsImage.paintIcon(this, g, 700, 23);
// Draw the border for gameplay
g.setColor(Color.WHITE);
g.drawRect(24, 74, 851, 577);
// Draw background for the gameplay
g.setColor(Color.BLACK);
g.fillRect(25, 75, 850, 575);
// Draw score
g.setColor(Color.WHITE);
g.setFont(new Font("arial", Font.PLAIN, 14));
g.drawString("Score: " + score, 780, 30);
// Draw high score
g.drawString("High Score: " + highScore, 780, 50);
}
이미이 질문을했으며 중복 된 질문과 여러 가지 유사한 질문에 대한 링크가 제공되었습니다. 왜 다시 묻는거야? 이전 링크에서 얻은 것을 왜 보여주지 않습니까? 이전에 요청한대로 [mcve]를 게시하지 않는 이유는 무엇입니까? –
이것은 다르지만, 내 페인트 기능에서 무언가를 반복 할 수있는 방법에 대해 묻고 있습니다. –
루프를 수행하지 않고 논리를 올바르게 생각하지 않아도됩니다. 중복 된 내용을 읽으십시오. 마우스 수신기의 필드 상태를 변경 한 다음 해당 변경을 사용하여 페인트 할 대상을 결정합니다. 그러나 이전에 제안되었던 것처럼 JLabels에서 ImageIcon을 교환하는 것이 훨씬 낫습니다. –