1

GUIコンポーネントの位置、幅、高さはいつ設定されますか?レイアウトマネージャーを使用している場合、これらのフィールドはどのように影響を受けますか?2つのスライダーを含むパネルがあり、そのうちの1つの横に長方形を描画したいと思います。GUIコンポーネントを初期化し、スライダーの1つの横に長方形でペイントするコードは次のとおりです。

public PhotoSliders() 
{
    initComponents();    //from the netbeans GUI designer
}

public void setColorRect()   //initialize a colored rectangle
{
    colorRect = new ColorRect(Color.RED, (double)(emSlider.getX())/getWidth(), (double)(emSlider.getY())/getHeight());
}

public void paintComponent(Graphics g)
{
    super.paintComponent(g);

    colorRect.paintColorRect(g, getWidth(), getHeight());
}

emSlider.getX()、emSlider.getY()、getWidth()、およびgetHeight()は最初はすべて0であることがわかりました。アプレットのサイズを変更して再描画すると、フィールドがゼロではなくなります。なぜ最初はすべてゼロなのですか?これが私のアプレットクラスのコードです:

public void init()                               //initialize the Applet Class
{
   setLayout(new BorderLayout());
   slidersPanel = new PhotoSliders();
   JPanel north = new JPanel(new BorderLayout());

   north.add(slidersPanel, BorderLayout.WEST);
   add(north, BorderLayout.NORTH);
   add(photoEffect, BorderLayout.CENTER);      

   slidersPanel.setColorRect();

}

   public void paint(Graphics g)                   //paint the photoEffect
   {     
      super.paint(g);
      slidersPanel.setColorRect();
   }
4

1 に答える 1

1

コンポーネントの位置とサイズは、GUI がレンダリングされるときに設定され、それ以前はデフォルト値である0. デスクトップ アプリケーションの場合、トップ レベル ウィンドウで が呼び出されpack()たとき、トップ レベル ウィンドウで が呼び出されたときsetVisible(true)、またはすべてがレンダリングされた後にコンポーネントが GUI に追加された場合はコンポーネント自体で呼び出されたときに、これが発生します。

アプレットの場合は、アプレットがレンダリングされるときです。これは、バックグラウンドで行われます。Swing リスナーの 1 つを使用して、これをリッスンできる場合があります。おそらくAncestorListener ....編集、はい、そうだと思います。AncestorListenerを使ってみてください。

Filthy Rich Clientsを購入して、Swing グラフィックスを深く掘り下げたすばらしい本を手に入れることを検討してください。

于 2012-05-24T02:50:20.513 に答える