2011-11-21 4 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')를 함께 사용하지 마십시오. * "(나중에 코드)"* (Answers later) –

+0

페인트 방법은 페인팅을위한 것입니다. 다른 방향으로 : 청취자 등록은 다른 곳에서 (한 번만)해야합니다. – kleopatra

+0

왜 바퀴를 다시 발명합니까? 그 모든 핵심적인 세부 사항을 수행하는 구성 요소가 있습니다 (버튼 f.i.) – kleopatra

답변

3

문자열에 JLabel을 사용하기 만하면됩니다. 그런 다음 Label에 MouseListener를 추가 할 수 있습니다.

+0

OP를 사용할 수 있다면 이것은 분명 쉬운 방법입니다. –

0

당신은 단순히 특정 메뉴 항목에 사각형 영역을 할당 할 수 있으며, 클릭 한 다음 특정 지역에서 발생하는 경우는 해당 메뉴 항목이 클릭 된 것을 알고있다.

2

당신은 당신의 캐릭터 라인의 경계를 취득하고 사각형에 클릭 된 경우 결정하기 위해 FontMetricsgetStringBounds 방법을 사용할 수 있습니다.

앤드류 Thomspon가 언급 한 바와 같이, 당신은 스윙 (경량) 및 AWT (헤비급)를 혼합하지 않도록해야합니다 가능한 경우 구성 요소 (필요할 경우 http://java.sun.com/developer/technicalArticles/GUI/mixing_components/).

+0

나는 당신에게 투표합니다. getStringBounds()가 훨씬 더 좋습니다. – Bill

+0

나는이 덕분에 노력할 것이고, 그것이 작동한다면 투표 할 것이다. –

+1

'FontMetrics'를 얻었고 그래픽으로 설정했으면, 어떻게 사용합니까? –