2014-05-02 102 views
1

這是我現在面臨的一個遊戲問題。這是一個Tic-Tac-Toe遊戲,用戶和朋友可以一起玩。我還沒有完成,但這是我的。任何時候窗口被最小化或被另一窗口覆蓋時,繪製的圖形部分(X和O)被刪除。我真的不知道該怎麼做,最好有一種方法,不要將圖形刪除。我的主要課程我的paintComponent()方法只是設置董事會的設計。 任何幫助表示感謝,謝謝!如何在屏幕最小化的情況下防止Java擦除內容?

private class DrawXO implements MouseListener { 

    public void mousePressed(MouseEvent evt) { 

     int x = evt.getX(); 
     int y = evt.getY(); 

     Graphics gContext = getGraphics(); 
     Graphics2D graphics = (Graphics2D) gContext; 


     graphics.setStroke(new BasicStroke(8)); 
     if (playerOneTurn) { 

      Player1.drawCircle(gContext, x, y); 
      checkForWinner(); 

      if(playerOneWins) { 
       System.out.println("Player one wins"); 
      } 

      playerTwoTurn = false; 
     } else { 
      // Still need to implement drawing for this ~ 
      checkForWinner(); 

     } 

    } 

    public void mouseExited(MouseEvent evt) {} 
    public void mouseEntered(MouseEvent evt) {} 
    public void mouseClicked(MouseEvent evt) {} 
    public void mouseReleased(MouseEvent evt) {} 
} 
+0

東西,也許你有代碼時,屏幕再次變得可見清除屏幕。 –

回答

1
  1. 不要使用getGraphics();

  2. 你需要學習如何定製油畫在Swing做。運行通過Performing Custom Painting。您會注意到油漆需要使用paintComponent方法(在您的JPanelJComponent課程中),該方法需要Graphics(爲您創建的創建)您用於執行自定義繪畫的上下文。所有的繪畫應該在這種情況下完成。

    protected void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        Graphics2D g2 = (Graphics2D)g; 
        // do painting here 
    } 
    

    注意:不要將顯式調用此方法時,自動調用

  3. 要更新的圖形,你會做一些更新,一些油漆變量,然後調用repaint()。也許是這樣的:

    @Override 
    public void mousePressed(MouseEvent e) { 
        x = e.getX(); 
        y = e.getY(); 
        repaint(); 
    } 
    
    @Override 
    protected void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        Graphics2D g2 = (Graphics2D)g; 
        g2.fillRect(x, y, width, height); 
    } 
    
  4. 如果你想添加/繪製多個對象,說用鼠標點擊,然後保持對象的List並通過列表的int paintComponent方法進行迭代。單擊鼠標時,將另一個對象添加到列表中並重新繪製。像

    List<Rectangle2D> rectangles; 
    ... 
    @Override 
    public void mousePressed(MouseEvent e) { 
        x = e.getX(); 
        y = e.getY(); 
        rectangles.add(new Rectangle2d.Double(x, y, width, height); 
        repaint(); 
    } 
    ... 
    @Override 
    protected void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        Graphics2D g2 = (Graphics2D)g; 
        for (Rectangle2D rect: rectangles) { 
         g2.fill(rect); 
        } 
    } 
    
相關問題