Обнаружение щелчка строки холста - PullRequest
0 голосов
/ 21 ноября 2011

Я работаю над игрой, и для меню я использую 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
}
}

Ответы [ 3 ]

3 голосов
/ 21 ноября 2011

Просто используйте JLabel для строк.Затем вы можете добавить MouseListener к метке.

2 голосов
/ 21 ноября 2011

Вы можете использовать метод getStringBounds в FontMetrics, чтобы получить границы вашей строки и определить, был ли нажат этот прямоугольник.

Как упоминал Эндрю Томпсон, вам следует избегать смешивания компонентов Swing (легкий) и AWT (тяжелый), если вы можете (хотя вы можете сделать это при необходимости http://java.sun.com/developer/technicalArticles/GUI/mixing_components/).

0 голосов
/ 21 ноября 2011

Вы можете просто назначить прямоугольную область данному пункту меню, и если в заданной области происходит щелчок, то вы знаете, что соответствующий пункт меню был нажат.

...