2009-08-26 9 views
1

メソッドに内部クラスを作成しています。その後、私はBitmapFieldを作成中にInnerクラスにアクセスし、Horizo​​ntalFieldManagerで追加します。

public class Test extends MainScreen 
{ 
    HorizontalFieldManager hfm; 
    Bitmap bitmap[] = new Bitmap[100]; 
    BitmapField[] bitmapField = new BitmapField[100]; 
    int countBitmap = 0; 

    Test() 
    { 
     VerticalFieldManager vfm_Main = new VerticalFieldManager(); 
     hfm = new HorizontalFieldManager(HorizontalFieldManager.USE_ALL_WIDTH); 
     vfm_Main.add(hfm); 
     add(vfm_Main); 
    } 


    void drawBitmap() 
    { 
    bitmap[countBitmap] = new Bitmap(100, 100); 
    bitmapField[countBitmap] = new BitmapField(bitmap[countBitmap]){ 
    public void paint(Graphics g) 
    { 
      ................ 
      ................ 
      g.drawLine(x1,y1,x2,y2); 
     } 
    } 


    synchronized(UiApplication.getEventLock()) 
    { 

     for(int i = 0 ; i < bitmapField.length; i++) 
     { 
     if(bitmapField[i] != null) 
     { 
       bitmapField[i].setBitmap(bitmap[i]); 
     } 
     } 
     hfm.add(bitmapField[countBitmap]); 
     countBitmap++; 

、のようないくつかのステートメントにアクセスしています。しかし、ここで問題がbitmapFieldを作成する前に、ビットマップ&を作成した後で、制御が

synchronized(UiApplication.getEventLock()){hfm.add(bitmapField[countBitmap]); } 

に行くのでbitmapFieldを作成する前に、それを追加しますhfmで

出力が「新しいBitmapFieldがhfmに追加されるたびに(前のものを置き換えることによって同じ位置にあることを意味します)」のように出力されます。しかし、私はBitmapFieldsがhfmの隣に来ることを望みます。

どうすればよいですか?

なぜ、コントロールが新しいbitmapField()内部クラスの前に最初にhfm.add()になるのか?

+0

の延長として新しいクラスを作成する方が良いでしょうあなたのコーディングスタイルがここに不均一なようで、いくつかの密接があるように見えますカッコがありません。ここでやろうとしていることを理解するのが少し難しくなります。たとえば、2番目のコードはどこに収まるのですか? drawBitmap()の終わりですか? – Richard

+0

交換の問題(以前のものと置き換えて同じ位置に置き換える)が今解決されました。しかし、新しい問題は、最近の図面が前のものに置き換えられて追加されていることです。 初めて描画する場合は、bitmapFieldで正しく描画されます。 uを2回目に描画し、次に2回目の描画をbitmapFieldに追加すると、前のパターンが置き換えられます。 paint()を2回呼び出して2つの図面を描画します。 この問題を解決するにはどうすればよいですか? – Shreyas

答えて

1

コードについて、いくつかの提案、すべての最初:

  • がない理由は、それがsetBitmap、ビットマップがすでにBitmapFieldコンストラクタ
  • にUIスレッド
  • 渡されていないですので、実際には、すべてのBitmapFieldsが来同期しない使用を参照してください。 hfmでお互いに隣り合っていることを明確にするために、私はそれぞれに番号を付けました。
  • あなたはいくつかのカスタムコンストラクタまたはBitmapFieldで新しいフィールドをしたい場合、BitmapField

    class TestScr extends MainScreen { 
    HorizontalFieldManager hfm; 
    Bitmap bitmap[] = new Bitmap[100]; 
    BitmapField[] bitmapField = new BitmapField[100]; 
    
    TestScr() { 
        hfm = new HorizontalFieldManager(); 
        add(hfm); 
        drawBitmap(); 
    } 
    
    void drawBitmap() { 
        for (int i = 0; i < 5; i++) { 
         bitmap[i] = new Bitmap(50, 50); 
    
         Graphics graphics = new Graphics(bitmap[i]); 
         graphics.setColor(Color.RED); 
         String number = Integer.toString(i); 
         Font font = graphics.getFont().derive(Font.BOLD, 40, Ui.UNITS_px); 
         graphics.setFont(font); 
         int textWidth = graphics.getFont().getAdvance(number); 
         int textHeight = graphics.getFont().getHeight(); 
         int x = (bitmap[i].getWidth() - textWidth)/2; 
         int y = (bitmap[i].getHeight() - textHeight)/2; 
         graphics.drawText(number, x, y); 
    
         bitmapField[i] = new BitmapField(bitmap[i]) { 
          public void paint(Graphics g) { 
           super.paint(g); 
           int width = getWidth() - 1; 
           int height = getHeight() - 1; 
           g.setColor(Color.GREEN); 
           g.drawLine(0, 0, width, 0); 
           g.drawLine(width, 0, width, height); 
           g.drawLine(width, height, 0, height); 
           g.drawLine(0, height, 0, 0); 
          } 
         }; 
    
         hfm.add(bitmapField[i]); 
        } 
    } 
    } 
    
+0

こんにちはcoldice、最初のすべての答えのための多くのthx。今、お互いの隣に来る。私の答えも見てください。私は3日間これを試していた。どうもありがとう...... – Shreyas

関連する問題