質問

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

MyComponentと呼ばれる私のメインのJComponentクラスでは、保護されたメソッドペイントコンポーネントをオーバーライドします。

しかし、私はメインの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();マイコンポネントのコンテナリストに追加されたコンテナの1つから、そしてもちろんJComponents Addメソッドを使用してメインコンポーネントリストにグラフィックスオブジェクトを使用します。コンテナは、setVisible(true)を呼び出すことにより、表示されるように設定されています。方法。

しかし、何も起こりません。画面は空です。 Page_gをGに置き換えると、絵画が機能します。これは、jcomponent(mycomponent)に塗装するためですが、この場合はmycomponentの子供であるコンテナにペイントしたいからです。

「getgraphics()を使用しないでください」とよく聞きました。しかし、親が塗装する方法が呼び出されたときに、親コンポーネントのサブコンポーネントのみをどのように描画できますか?

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top