2011-06-02 79 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