2011-11-21 37 views
0

我工作的一個遊戲和菜單我使用Canvas ES繪製該菜單的東西。帆布串點擊檢測

對於我使用圖形在畫布上選項和按鈕來繪製一個字符串。如何檢測鼠標點擊字符串?

選項帆布:

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.JFrame; 

public class OptionsScreen extends Canvas{ 

private static final long serialVersionUID = 1L; 
private Mouse ms = new Mouse(); 
private int optionPos = 275; 
private int volLev = 100; 
private int screenX = 800; 
private int screenY = 600; 
private JFrame mainWindow; 

public OptionsScreen(JFrame f) 
{ 
    mainWindow = f; 
} 

public void paint(Graphics g) { 
    g.setFont(new Font("JI-Pelter", Font.PLAIN, 24)); 
    g.setColor(Color.lightGray); 

    //Draw strings 
    //Music and Sound 
    g.drawString("Music:", optionPos, 150); g.setColor(Color.yellow); g.drawString("On", optionPos + 100, 150); g.setColor(Color.white); g.drawString("Off", optionPos + 175, 150); g.setColor(Color.lightGray); 
    g.drawString("Sound:", optionPos, 200); g.setColor(Color.yellow); g.drawString("On", optionPos + 100, 200); g.setColor(Color.white); g.drawString("Off", optionPos + 175, 200); g.setColor(Color.lightGray); 
    g.drawString("Volume Level:", optionPos, 250); g.setColor(Color.white); g.drawString(volLev + "%", optionPos + 175, 250); g.setColor(Color.lightGray); 
    //OpenGL Settings 
    g.drawString("Advanced OpenGL:", optionPos, 300); g.setColor(Color.white); g.drawString("On", optionPos + 225, 300); g.setColor(Color.yellow); g.drawString("Off", optionPos + 300, 300); g.setColor(Color.lightGray); 
    //Screen Settings 
    g.drawString("Game Resolution:", optionPos, 350); g.setColor(Color.white); g.drawString(screenX + "x" + screenY, optionPos + 200, 350); g.setColor(Color.lightGray); 
    this.addMouseListener(ms); 
} 
} 

class Mouse implements MouseListener 
{ 
@Override 
public void mouseClicked(MouseEvent arg0) { 
} 

@Override 
public void mouseEntered(MouseEvent arg0) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void mouseExited(MouseEvent arg0) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void mousePressed(MouseEvent arg0) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void mouseReleased(MouseEvent arg0) { 
    // TODO Auto-generated method stub 
} 
} 
+1

不要混合Swing組件(例如'JFrame')與AWT的部件(例如'Canvas')。 *「(代碼更新)」 *(答案後) –

+0

paint方法是畫,沒有別的。反過來說:聽衆註冊必須在其他地方完成(一次) – kleopatra

+0

爲什麼重新發明輪子?有組件可以處理所有這些細節(按鈕f.i.) – kleopatra

回答

3

只需使用該字符串的JLabel。然後,您可以將MouseListener添加到標籤。

+0

如果使用一個可能的OP,這絕對是更簡單的方法 –

0

你可以簡單的矩形區域分配給一個給定的菜單項,如果在某一地區發生了點擊,那麼你知道它的相應的菜單項已被點擊。

2

可以使用getStringBounds方法FontMetrics讓您的字符串的界限,並確定是否被點擊了該矩形。

安德魯Thomspon提到的,你應該避免混合擺動(輕量級)和AWT(重量級)如果可以的話(不過,如果需要http://java.sun.com/developer/technicalArticles/GUI/mixing_components/你可以做到這一點)組件。

+0

我投票支持你的。 getStringBounds()是一個更好的建議。 – Bill

+0

我會嘗試這個謝謝,我會投票,如果它的工作 –

+1

好吧,我有一個'FontMetrics'並將它設置爲圖形,我該如何使用它? –