0

私のプログラムには3つのクラスがあります。1) メイン、2) フレーム、3) 描画ボード。私のプログラムのロジックは、ユーザーが [新しいパターン] ボタンをクリックするたびに新しい図面が表示されることです (これは正常に機能します)。

第 1 クラス - メイン メソッド

public class mainPage {
   public static void main(String[]args){
     JFrame appFrame = new Frame();
     appFrame.setVisible(true); 
     appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);*/
   }
}

2 番目のクラス - レイアウトについて説明します (私は Grid Bag Layout を使用します)

public class Frame extends JFrame implements ActionListener {
  public Frame (){
   GridBagLayout m = new GridBagLayout();
   Container c = (Container)getContentPane();
   c.setLayout (m);
   GridBagConstraints con;

   JButton bPattern = new JButton("New Pattern");
   ....
   bPattern.addActionListener(this);

   JPanel pDraw = new JPanel();        
   .....
   pDraw.add(new drawingBoard()); //drawing will be placed in this panel
 }

 public void actionPerformed(ActionEvent e) {
   repaint();        
 }

}

3 番目のクラス - 描画関数 (paintComponent () など) を実行します。

public class drawingBoard extends JPanel {
  public drawingBoard(){}
  public void paintComponent(Graphic g){}
  ....
  }

問題は、コンソールを見ると、ユーザーがボタンをクリックしていなくても、プログラムが「drawingBoard」クラスを呼び出して再描画しているように見えることです。ペイント コンポーネントは 3 番目のクラス (drawingBoard) にあります。これで問題が発生することはないように思えますが (たとえば、ユーザーがボタンをクリックしない限り、パネルに描画が表示されないなど)、これがどのように発生したのか興味があります。これは、このコードを FRAME クラス () で記述したためです。このコードを作成する意図は、この特定のパネル (3 つのパネルがあります) に図面を配置する必要があることを確認することですが、ボタンがクリックされていない限り、3 番目のクラスを呼び出すことはありません。

JPanel pDraw = new JPanel();        
pDraw.add(new drawingBoard()); //place drawing here
4

1 に答える 1

0

repaintメソッド(およびその後のメソッドpaintComponent)はJFrame、の内容を再描画する必要がある場合に、Swing自体によってだけでなく、Swing自体によっても呼び出されJPanelます。

AWTとSwingのPaintingの記事は、Paintingがどのように機能するかについての情報を得るのに適した場所です。

この場合、メソッドは、記事がシステムトリガーペインティングrepaintと呼ぶイベントによって呼び出されています。

システムによってトリガーされるペイント操作では、通常、次のいずれかの理由で、システムがコンポーネントにそのコンテンツをレンダリングするように要求します。

  • コンポーネントは最初に画面に表示されます。
  • コンポーネントのサイズが変更されます。
  • コンポーネントに損傷があり、修復する必要があります。(たとえば、以前にコンポーネントを覆い隠していたものが移動し、以前に覆い隠されていたコンポーネントの部分が露出しました)。
于 2009-10-11T16:21:59.103 に答える