簡體   English   中英

repaint()不調用基本的paintComponent嗎?

[英]Basic paintComponent not being called by repaint()?

我正在使用《 Headfirst java》這本書,並且整理了一個我認為可以很好編譯的程序。 但是在創建窗口時,背景或橢圓形沒有顯示出來。

import javax.swing.*;
import java.awt.*;

public class setup {  
  public static void main(String[] args) {    
    JFrame f = new JFrame();
    System.out.println("Created Frame");
    JPanel myJPan = new JPanel();
    System.out.println("Created Panel");

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    f.setSize(300,300);
    System.out.println("Set Size");
    f.setLocationRelativeTo(null);  
    f.setContentPane(myJPan);  
    f.setVisible(true);
    System.out.println("Made Visible");
    myJPan.repaint();
  }


  // @Override  ???
  //  "protected void" ??
  public void paintComponent(Graphics g) {
      // super.paintComponent(); ???
      g.fillRect(0,0,300,300);
      System.out.println("painted");
      int red = (int) (Math.random()*255);
      int green = (int) (Math.random()*255);
      int blue = (int)(Math.random()*255);
      System.out.println("Got Random Colors");
      Color randomColor = new Color(red, green, blue);
      g.setColor(randomColor);
      System.out.println("Set Random Colors");
      g.fillOval(70,70,100,100);
      System.out.println("Filled Oval");
  }
}

請參閱我對這個問題的回答 它提供了設置JPanel的正確方法的示例。

就像其他評論者/答者說的那樣, paintComponent屬於JPanel類。 這對您意味着什么,您需要創建一個擴展 JPanel的類(我們稱其為MyPanel )。 (注意:如果您在eclipse中,則可以為此類創建一個新的.java文件,或者將其設置為內部類,無論哪種方式都可以工作)。

完成此操作后,只需從setup類中剪切paintCOmponent方法並將其粘貼到新的MyPanel類中即可。

最后,在您的安裝程序類中,而不是創建JPanel對象,而是創建MyPanel

基本上,這個MyPanel對象是您自己的自定義JPanel對象,它可以執行您想要的任何操作! 幾乎就像魔術!

附帶說明(這希望將來可以幫助您更好地格式化代碼),並希望有更多Java程序員的經驗,對此我也表示同意,我也建議您也創建自己的自定義JFrame對象。 僅此一項,您將不會覆蓋constructor方法以外的任何方法。 相反,在此自定義JFrame constructor中,您將創建窗口的所有規范(例如setDefaultCloseOperation(JFrame.EXIT_ON_CLOSEsetSize(300,300)調用)。在此constructor中,還將實例化MyPanel對象(如以及窗口中的任何其他組件對象),並可能給它一些ActionListener

然后,在另一個類(例如您的setup類)中,有一個main方法,其中有1行:實例化“ JFrame”對象的行。 這將自動創建窗口。

哦,還有一件至關重要的事情:如果要顯示它,必須在JFrame上調用setVisible(true) 我不確定為什么要這樣設置。

暫無
暫無

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

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