2011-06-02 77 views
3

我有一个全屏程序,它为我制作的游戏绘制了很多东西。画布是整个窗口,它应该是。现在我想添加一个按钮或textfield(JButton和JTextField等)到我的窗口。但是,当我添加一个按钮或其他任何东西时,他们会开始画布。在全屏幕图形上添加JComponent

你有什么想法如何让按钮显示在画布上,所以我可以点击它?

编辑: 绘图代码:

public synchronized void draw(Graphics2D g) { 
     if (!welcome) 
      g.drawImage(background,0,0,null); 

     if (welcome) { 
      g.drawImage(new ImageIcon (getClass().getResource("images/backgroundWelcome.jpg")).getImage(), 0,0, null); 
     } 
     else if (gettingName) { 
      setFont (new Font("Verdana", Font.ITALIC, 40)); 

      g.draw3DRect(center.x -325, center.y -50, 650, 100, true); 
      g.drawString("Please enter your name", center.x -250, center.y -120); 
      g.drawString(name, center.x -315, center.y); 
     } 
     if (game) { 
      for (Player p: player) { 
       int x = center.x; 
       int y = center.y; 

       switch (p.getID()) { 
       case 1: 
        x -= name.length()*10; 
        y *= 1.4; 
        break; 
       case 2: 
        x -= name.length()*10; 
        y /= 1.4; 
        break; 
       case 3: 
        x *= 1.4; 
        x -= name.length()*10; 
        break; 
       case 4: 
        x *= 0.6; 
        x -= name.length()*10; 
        break; 
       default: 
        System.out.println("Error 2"); 
       } 
       g.drawString(p.getName(),x,y); 
      } 
      for (int x = 0; x<13; x++) { 
       g.drawImage(diamonds[x].getImage(), (int) diamonds[x].getX(), (int) diamonds[x].getY(), null); 
       g.drawImage(clubs[x].getImage(), (int) clubs[x].getX(), (int) clubs[x].getY(), null); 
       g.drawImage(hearts[x].getImage(), (int) hearts[x].getX(), (int) hearts[x].getY(), null); 
       g.drawImage(spades[x].getImage(), (int) spades[x].getX(), (int) spades[x].getY(), null); 
      } 
      g.drawImage(put.getImage(), (int) put.getX(), (int) put.getY(), null); 
     } 

     if (won) { 
      g.drawImage(new ImageIcon (getClass().getResource("images/backgroundWelcome.jpg")).getImage(), 0,0, null); 
     } 
     else if (lost) { 
      g.drawImage(new ImageIcon (getClass().getResource("images/backgroundWelcome.jpg")).getImage(), 0,0, null); 
     } 
    } 

EDIT2: 我的帧是一个JFrame。

+0

请提供相关代码。 – mre 2011-06-02 12:05:13

+0

我不认为代码有任何相关性,但无论如何我都会添加它。 – Hidde 2011-06-02 12:06:15

回答

2

这是很难分辨的代码片段多少(请考虑张贴在未来的SSCCE),但:

  1. 不要在这个千年代码AWT。
  2. (至少直到爪哇7)
  3. 不要加载draw()方法内的图像(其被推测从paintComponent()方法调用)不要与AWT混合摇摆。
  4. 请注意,Swing中的自定义绘画可以在JComponentJPanel中完成,并且如果该类是后者,则可以使用添加了其他组件的布局。
+0

@Andrew Thompson +1 – mKorbel 2011-06-02 12:39:26

+0

@mKorbel:如果您真的*想要感谢我,我会接受关于我的[文件管理器问题](http://stackoverflow.com/questions/6182110)线程的用户报告。您对该主题的评论很有价值,但碰撞/爆炸测试报告会更好。 (是的,好的 - 我正在寻找答案 - 请原谅我处于困境,如果我超越了礼貌的范围,请不理我)。 – 2011-06-02 12:56:27

+0

谢谢。我添加了我的代码,因为第一条评论告诉我。我不认为任何代码是必要的。你需要什么代码,我会删除其余的... 如果我可能会问,为什么我不应该使用AWT(如果我使用它,为什么不与Swing结合)?直到现在我发现它运行良好。 – Hidde 2011-06-05 16:59:39

2

您正在自己画画布,所以您需要在别处添加按钮或绘制看起来像按钮的区域,并检查鼠标事件是否落入按钮区域。

+0

是的,我已经做到了,但我很懒,按钮看起来不像普通按钮。我只是想知道是否有添加JButton的方法。 – Hidde 2011-06-02 12:07:52

+2

您可以使用正常的按钮绘画功能。只需将图形传递给按钮的paintComponent方法即可。 – jzd 2011-06-02 12:09:21

+0

我会研究这一点,现在我会标记回答的问题(我正在与此相处)。 thnx的快速反应。 – Hidde 2011-06-02 12:19:23