[問題] 為何剛執行時會進去paintComponent兩次?

看板java作者 (Howard)時間15年前 (2011/02/20 17:28), 編輯推噓3(303)
留言6則, 3人參與, 最新討論串1/1
因為對Swing和繪圖不熟, google之後,也找不到原因(可能是因為很簡單?) 所以想請教一個基本的問題, 就是為何以下黄色敘述,在程式一開始執行的時候會印2次? 以及在resize frame時,也會印? 先謝謝了! class MyDrawing extends JPanel { @Override public void paintComponent(Graphics g) { System.out.println("################"); // 為什麼上一行會印兩次? 以及為何resize frame時, 也會印? super.paintComponent(g); g.drawLine(100, 100, 200, 200); } public static void main(String[] args) { MyDrawing drawing = new MyDrawing(); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 500); drawing.setPreferredSize(new Dimension(450, 450)); frame.getContentPane().add(drawing); frame.pack(); frame.setVisible(true); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.43.149.14

02/20 17:34, , 1F
resize時他會重繪(縮到最小再放大也會)
02/20 17:34, 1F

02/20 17:46, , 2F
那可以避免嗎?除了frame.setResizable(false)外。
02/20 17:46, 2F

02/20 19:02, , 3F
重繪的時機是由系統決定的阿 你要不要說明一下不想印的原因
02/20 19:02, 3F

02/20 22:42, , 4F
是想了解為何首次執行時會進去paintComponent兩次
02/20 22:42, 4F

02/21 15:57, , 5F
我的建議是不要去數paint幾次 因為你無法控制
02/21 15:57, 5F

02/21 15:58, , 6F
然後程式邏輯跟繪圖分開來寫
02/21 15:58, 6F
文章代碼(AID): #1DODwzI9 (java)