2017-10-10 9 views
-2

だから、私はこの問題を解決しようとしています。私はマウスが私のイメージの上にあるかどうかを知るために、すでに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); 
} 
+0

あなたはすでにこの質問をしていますが、重複していて、多くの同様の質問にリンクしています。なぜそれをもう一度聞いていますか?なぜあなたは以前のリンクから何かを得たことを示していないのですか?なぜ以前にリクエストされたように[mcve]を投稿していませんか? –

+0

これは異なっていますが、私は私のペイント関数で何かループする方法について質問しています –

+0

ループしないで、ロジックを正しく考えていません。重複を読んでください。マウスリスナー内のフィールドの状態を変更し、その変更を使用して何をペイントするかを決定します。しかし以前にも示唆されたように、JLabelsでImageIconを交換する方がはるかに優れています。 –

答えて

0

どのようにしてそれを再描画することができますか?画像の場所が変更されたとき

reapint();は、絵を更新する必要がある場所で呼び出します。たとえば、画像上にマウスを置いたときのリスナーなどです。

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"; 
    } 
    repaint(); 
} 
+0

ありがとう、問題は、私のペイント関数が別のクラスにあるということです... –

+0

これは私が直面している問題です –

+0

@EricLeus次に、あなたの現在のコード構造を、パネルとリスナーなどをコーディングした場所。 – user3437460

関連する問題