簡體   English   中英

Swing中的自定義繪圖循環

[英]Custom Drawing loop in Swing

我正在嘗試學習如何在Java中為正在進行的小組項目做自定義GUI。 我過去已經做過用戶表單類型的GUI,所以我知道我在這里做什么的要旨,但是自定義工程圖仍然讓我感到困惑。

我從網上復制了這段代碼,我一直試圖弄清楚它是如何工作的,但是我不明白為什么我不能循環繪制方法。 作為一個簡單的測試,我試圖使程序在光標上繪制一個橢圓形。 它在光標上繪制橢圓,但在運行時僅繪制一次,然后不執行任何操作。

我該如何進行循環,以便繼續繪畫? 還是我需要調用/使用方法的其他方式?

public class BombermanGUI extends JFrame {
   public static final int CANVAS_WIDTH  = 640;
   public static final int CANVAS_HEIGHT = 480;

   private DrawCanvas canvas;

   public BombermanGUI() {
      canvas = new DrawCanvas();  
      canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));

      Container cp = getContentPane();
      cp.add(canvas);

      this.setDefaultCloseOperation(EXIT_ON_CLOSE);  
      this.pack();             
      this.setTitle("......"); 
      this.setVisible(true);    
   }

   private class DrawCanvas extends JPanel{
      @Override
      public void paintComponent(Graphics g){
         super.paintComponent(g);  
         setBackground(Color.BLACK); 

         int x, y;
         x = MouseInfo.getPointerInfo().getLocation().x - this.getLocationOnScreen().x;
         y = MouseInfo.getPointerInfo().getLocation().y - this.getLocationOnScreen().y;
         g.setColor(Color.YELLOW);    
         g.drawOval(x, y, 10, 10);

      }
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         @Override
         public void run() {
            new BombermanGUI(); 
         }
      });
   }
}

繪制一系列復雜的回調和對系統內更改的響應。 首先要記住的是,您不控制繪畫過程,而是向系統提出建議,以便系統可以決定應重新繪畫的內容和時間。

有關更多詳細信息,請參閱AWT中的繪畫以及“搖擺執行自定義繪畫 ”。

繪畫是一個破壞性的過程。 假定發生重新繪制時,您將重新繪制當前組件的整個狀態。 這意味着您將需要某種模型來維護所有需要繪制的內容...

看一下2D圖形 ,特別是看一下Shape一節

為此, MouseInfo是一種非常糟糕的檢測鼠標位置的方法,而應該使用MouseListener和/或MouseMotionListener來檢測鼠標事件。

基本上,當用戶按下鼠標按鈕時,您將記錄鼠標按下的位置。 移動鼠標時,您將計算相對於鼠標按下的移動寬度和高度,並更新“當前”形狀。 您將調用repaint來請求更新UI並通過paintComponent方法繪制此形狀(首先繪制所有先前的形狀)。

釋放鼠標按鈕時,您將向模型提交“當前”形狀,因此每次調用paintComponent時都會對其進行繪制。

這是tobais_k即時消息,我正在回答關閉問題!

添加一個事件偵聽器並使其調用repaint方法,例如,用於跟蹤鼠標光標的鼠標運動偵聽器,或者讓某個線程運行您的游戲並定期觸發重新繪制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM