2017-10-10 157 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"; 
      } 
     } 
    }); 
} 

非常小的片塗料(圖形克)(在不同的類):

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交換ImageIcons會好得多。 –

回答

0

我怎樣才能讓它重新繪製它ag ain當圖像位置改變時

調用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然後你可能想向我們展示你當前的代碼結構,就像在哪裏面板和你在哪裏編碼listener ..等等。 – user3437460

相關問題