2

いくつかのJComponentオブジェクトを追加するjrameがあります。各JComponentには、JComponent.add(Component)を使用して追加したコンテナーのリストがあります。

MyComponentと呼ばれるメインのJComponentクラスで、保護されたメソッドpaintComponentをオーバーライドして、ペイントできるようにしました。これは非常にうまく機能します。

ただし、メインのJComponentにペイントしたくないので、メインのJComponentに追加したコンテナーにのみペイントしたいと思います。

したがって、paintComponentのMyComponentでは、次のようにします。

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

  Graphics page_g = this.getPage( "main").getGraphics();

  page_g.setColor( Color.RED);
  page_g.drawRect( 10, 10, this.getWidth() - 20, this.getHeight() - 20);
  page_g.setColor( Color.BLUE);
  page_g.drawString( "HELLO WORLD", this.getWidth() / 2, this.getHeight() / 2);
}

行this.getPage( "main")。getGraphics(); コンテナのMyComponentsリストに追加されたコンテナの1つから、そしてもちろんJComponentsaddメソッドを使用してメインコンポーネントリストにGraphicsオブジェクトを取得します。setVisible(true);を呼び出すことにより、コンテナーが表示されるように設定されます。方法。

しかし、何も起こりません。画面が空です。page_gをgに置き換えると、JComponent(MyComponent)にペイントするため、ペイントは機能しますが、この場合はMyComponentの子であるコンテナーにペイントしたいと思います。

「getGraphics()は絶対に使用しないでください」とよく耳にします。しかし、親のpaintComponentメソッドが呼び出されたときに、親コンポーネントのサブコンポーネントのみを描画する方法は他にありますか?

4

1 に答える 1

1

本当に最善の策は、実際にカスタム ペインティングを行っているクラスに独自の paintComponent() メソッドをオーバーライドさせることです。AWT がグラフィック コンテキストを気にするようにします。

于 2011-01-09T23:30:42.740 に答える