2013-02-20 66 views
0

嗯,他是我的問題:JFrame和圖形的深度(Java)

我試圖繪製一個網格使用Java圖形到JFrame。但是當我這樣做時,網格覆蓋了JFrame的組件(JTextFields,Buttons等),我試圖在paint方法的末尾寫上「super.paint(g)」,但是當我這樣做時,網格不會出現。

He're是代碼:

  public void paint(Graphics g){ 
        super.paint(g); 
        g.setColor(Color.PINK); 
        g.drawLine(0, 240, 640, 240); 
        g.drawLine(320,0,320,480); 
        g.setColor(Color.GRAY); 
        for (int i=1; i<24; i++){ 
         g.drawLine(0, i*20, 640, i*20); 
        } 

      } 

謝謝你們!

+0

1)不要擴展'JFrame' 2)在JComponent或JPanel中自定義繪畫。 3)對於這些組件,重寫'paintComponent(Graphics)'(或者替代爲2&3,將渲染繪製到'BufferedImage')4)爲了更好地幫助,請發佈[SSCCE](http://sscce.org /)。 – 2013-02-20 01:52:20

回答

3
  1. 創建自己的自定義組件(從JPanel之類的東西延伸)。重寫它的paintComponent方法,並在那裏做網格繪製(不要忘記打電話super.paintComponent)。
  2. 當您創建JFrame,設置面板作爲窗體的內容窗格 - 即frame.setContentPane(new GridPane())
  3. 繼續添加組件添加到幀正常。

不推薦覆蓋頂級容器JFramepaint方法。它們包含很多可能干擾繪畫的子組件,只需簡單地將繪畫過程擰緊即可。

+0

謝謝@MadProgrammer! 我得到了點,但現在,我不知道爲什麼只出現在網格d: 對不起打擾,he're是代碼:[鏈接](http://pastie.org/6233010) 再次感謝! – 2013-02-20 02:25:05

+0

您必須在添加任何框架之前設置內容窗格。更改內容窗格將刪除舊的並替換爲新的,並將任何先前存在的組件與之相提並論。 – MadProgrammer 2013-02-20 02:32:24

+0

很棒!我以前沒有意識到,現在它可以工作。謝謝MP! – 2013-02-20 02:45:17