2014-03-29 52 views
0

后,我有Menu类按钮 - newGame并退出:按钮JFrame的活跃创造新JPanel

public class Menu extends JFrame 
{ 
    JButton newGameButton = new JButton(); 
    ... 

    @Override 
    public void mouseClicked(MouseEvent e) 
    { 
    game.start(); 
    } 
} 

点击按钮,新的游戏开始后,所以该类:

public class Game extends JPanel implements Runnable 
{ 
    private Thread t; 

    public void start() 
    { 
    t = new Thread(this); 
    t.start(); 

    setVisible(true); 
    } 
} 

当我创建JPanel后,游戏启动并且按钮不可见,但是如果我单击某个按钮的位置,该按钮会闪烁并继续。我正在使用paintComponent(g)方法进行绘制,之前我在Canvas而不是JPanel上进行了绘制,之后将其更改为JPanel我有这个问题,有什么想法吗?

编辑:here是工作(Canvas)和非工作(JPanel)代码,在JPanel中我可以多次点击按钮,因为我想要的。

+3

为了更好地帮助越早,张贴[MCVE](http://stackoverflow.com/help/ mcve)(最小完整和可验证示例)。另外,那个'Runnable'看起来不对。所有的GUI更新都应该在EDT上,并且运行它的'Thread'不是。 –

+0

您是否尝试过我的解决方案发布在[KeyListener仅在点击画布后激活](http://stackoverflow.com/questions/22724286/keylistener-active-only-after-click-on-canvas/22724561#22724561)。根据您的意见,它在Canvas中工作正常,但现在它在使用JPanel后无法工作。试试我的解决方案,您不需要将其转换为JPanel。 – Braj

+0

感谢Braj的帮助,但是我删除了KeyListener,现在我正在使用密钥绑定并且它的工作非常完美。 –

回答

0

如果我理解正确,你的JPanel会在游戏菜单按钮的顶端产生,你仍然可以点击它们?

请在面板内部的菜单,并使其不可见当游戏开始

例如:

game.start(); 
gameMenu.setVisible(false); 
+0

如果我这样做,那么我可以'看到两个 - JFrame和JPanel –

+0

那么JFrame里面的JPanel不是吗?然后使JFrame不可见 –

+0

JPanel是在JFrame –