2

ある楕円形を別の楕円形の上にペイントしようとしています。ここでは、select ステートメントを使用して、ペイント コンポーネント メソッドを描画します。

import java.awt.*;

public class test extends JPanel{

public static final int OVAL = 1;
public static final int SOLID = 2;

private int type = LINE;

public test(int type){

    this.type = type;
}
public void piantComponent(Graphics g){
   super.paintComponent(g);

   switch(type)
   {
      case OVAL:
      g.setColor(Color.YELLOW);
      g.drawOval(0,0,150,150);
      break;

      case SOLID:
      g.setColor(Color.BLUE);
      g.fillOval(0,0,50,50);
      break;

   }
 }


}

私の主な方法では、黄色の楕円形(OVAL)の中に青色の実線の楕円形(SOLID)を表示したいと考えています。

  import...;
  public class Main{
      public static void main (String [] args){
             JFrame window = new JFrame();
             window.add(new test(test.OVAL));
             window.add(new test(test.SOLID));
             window.setSize(300,300);
             window.setVisible(true);

      }

  }

これは私がやりたいことをまったくしません。これは、楕円とソリッドではなく、楕円のみを表示します。楕円形のみを表示するためにウィンドウをオーバーロードしていると思います。レイアウトマネージャー(gridlayout)で表示しようとしましたが、2つの絵を重ねて表示するのではなく、2つの絵を並べて表示します。

switch ステートメントを失わずにこれを修正するにはどうすればよいですか。

4

5 に答える 5

1
window.add(new test(test.OVAL));
window.add(new test(test.SOLID));

あなたの問題は ZOrder に関係しています。簡単にするために、Swing は、パネル上にあるコンポーネントとは逆の順序でコンポーネントを描画します。したがって、あなたの場合、SOLID は OVAL の前に描画されます。OVALの方が大きいのでSOLIDをカバーしてくれます。

次のようにして、Swing にコンポーネントをより直感的な順序で描画させることができます。

window.add(0, new test(test.OVAL));
window.add(0, new test(test.SOLID));

最後に追加されたコンポーネントも最後にペイントされるようになりました。

ただし、サイズ、位置、色を個別に指定できるように、個別の Oval クラスと Solid クラスを作成することをお勧めします。次に、必要な数のコンポーネントをパネルに追加できます。

于 2013-04-08T15:21:18.703 に答える
1
于 2013-04-08T13:48:02.407 に答える
0

次々にペイントしてみませんか?そのように:

  g.setColor(Color.YELLOW);
  g.drawOval(0,0,150,150);
  g.setColor(Color.BLUE);
  g.fillOval(0,0,50,50);
于 2013-04-08T13:23:23.980 に答える
0

このようなことを試してください(スニペットを使用するだけです):

 private ArrayList<int> ovals = new ArrayList<int>();


 public test(int type) {
      ovals.add(type);
 }



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

      for(int oval : ovals)
      {
           switch(type)
           {
                case OVAL:
                g.setColor(Color.YELLOW);
                g.drawOval(0,0,150,150);
                break;

                case SOLID:
                g.setColor(Color.BLUE);
                g.fillOval(0,0,50,50);
                break;
           }
      }
 }

これにより、必要な数の楕円を追加できます (ただし、静的な配置では、キャンバスに上書きされるだけです)。ブール配列を使用して、それを反復処理して、それぞれ 1 つだけが必要な場合に特定のタイプをペイントする必要があるかどうかを確認できます。

于 2013-04-08T13:28:58.757 に答える