だから、私はこの問題を解決しようとしています。私はマウスが私のイメージの上にあるかどうかを知るために、すでにmouseListenerを設定しています。私はそれに格納されている画像の場所を持つ変数を持っており、画像が上に乗ったときに変化します。私のペイントコマンドが実行されると、デフォルトのイメージがペイントされ、その上にマウスを置くと再びペイントされないので変更されません。イメージの場所が変更されたときに、再びそれを再描画するようにするにはどうすればよいですか。ところで、mouseListenerはイメージとは別のクラスにあります。私のペイント機能で何かをループするには?
マイ画像:
private String settingsConfig = snake.settingsConfig;
settingsImage = new ImageIcon(getClass().getResource(settingsConfig));
settingsImage.paintIcon(this, g, 700, 23);
私の主なクラス(塗装方法は、他のクラスである)
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";
}
}
});
}
(別のクラスにおいて)塗料の非常に小さな部分(グラフィックスG):
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を交換する方がはるかに優れています。 –