【发布时间】:2014-04-02 12:23:16
【问题描述】:
我一直在尝试处理这段代码,就像当您将鼠标悬停在开始按钮上时,它应该将其颜色更改为灰色,但每当我将鼠标悬停在它上面时。什么都没发生,谁能告诉我为什么?我没有收到任何错误,编译器似乎无法识别我的 mousemoved 侦听器,对不起我的英语。我还没写完,代码如下:
class Contents extends JFrame implements Runnable {
private Image dbi;
private Graphics dbg;
private boolean isStarted, isHovered;
private int x,y,xDir,yDir,bx,by,timer,life,my,mx,mhx,mhy;
private Rectangle startgame = new Rectangle(80,100,150,40);
Contents()
{
super();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
if(isStarted)
setSize(600,600);
else
{
setSize(300,300);
setBackground(Color.BLUE);
}
setLocationRelativeTo(null);
isStarted = false;
isHovered = false;
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
mx = e.getX();
my = e.getY();
if(mx > startgame.x && mx < startgame.x+startgame.width &&
my > startgame.y && my < startgame.y+startgame.height)
{
isStarted = true;
}
}
public void mouseMoved(MouseEvent e)
{
mhx = e.getX();
mhy = e.getY();
if(mhx > startgame.x && mhx < startgame.x+startgame.width &&
mhy > startgame.y && mhy < startgame.y+startgame.height)
isHovered = true;
else
isHovered = false;
}
});
}
public void paint(Graphics g)
{
dbi = createImage(getWidth(), getHeight());
dbg = dbi.getGraphics();
draw(dbg);
g.drawImage(dbi,0,0,this);
repaint();
}
public void draw(Graphics g)
{
if(!isStarted)
{
if(!isHovered)
g.setColor(Color.GRAY);
else
g.setColor(Color.GREEN);
g.fillRect(startgame.x, startgame.y, startgame.width, startgame.height);
g.setFont(new Font("Serif",Font.BOLD,24));
g.setColor(Color.WHITE);
g.drawString("Start game", startgame.x+20, startgame.y+25);
g.drawString(String.format("hoverx: %d hovery: %d",mhx,mhy), 50,200);
}
else
{
}
}
public void run()
{
} }
public class Game {
public static void main(String[] args)
{
Contents c = new Contents();
} }
【问题讨论】:
-
另外,你能推荐一些可以帮助我学习制作游戏的网站吗?谢谢你。 :)
-
嗯..你不应该在按钮上添加
MouseListener,而不是框架吗?..然后只使用mouseEntered和mouseExited? -
如果它是您正在绘制的自定义按钮,它看起来像 1. 您需要在
mouseMoved方法中调用repaint()2. 不要在中调用repaintpaint方法。此外,您忘记在paint方法中调用super.paint。 -
除了尝试绘制所谓的按钮之外,还有很多其他方法。你可以只使用一个标签。您可以使用带有一些调整设置的实际按钮。您可以将图像用作按钮,然后使用它的翻转图标属性。我认为你的做法并不理想
-
如果我使用鼠标进入和鼠标退出,它只会在进入框架时获取x和y坐标,它不会知道它到达了startbutton坐标。
标签: java swing jpanel paint runnable