2009-08-26 61 views
1

我在方法中创建一个内部类。之后,我访问了一些之类的语句,访问内部类创建BitmapField并将其添加到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。

所以输出就像“每次在hfm中添加一个新的BitmapField(意味着通过替换前一个位置在相同的位置)”。但是我希望BitmapField在hfm中相邻。

怎么办?

控件在新的bitmapField()内部类之前首先转到hfm.add()的任何解决方案?

+0

你的编码风格在这里似乎参差不齐的,而且似乎有些接近括号丢失。让你难以理解你在这里做什么。例如,第二代代码被剪切到哪里?它是drawBitmap()的结束吗? – Richard 2009-08-26 19:46:26

+0

现在解决替换问题(通过替换前一个替换相同的位置)。但是一个新问题是,最近的图形是通过替换前一个图形而添加的。 意思是如果你第一次画,那么它正确地在bitmapField中。如果你第二次绘制,那么通过替换前一个,第二次绘制的图形被添加到bitmapField中。 paint()被调用2次绘制2个图纸。 如何解决这个问题? – Shreyas 2009-08-27 09:22:01

回答

1

首先,有关代码的几个建议:

  • 看不出有任何理由使用同步,因为它的UI线程
  • 不setBitmap,位图已经传递给BitmapField构造
  • 实际上所有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

你好,首先thx很多的答案。现在它正在彼此相邻。也请参阅我的答案。我试了3天。非常感谢...... – Shreyas 2009-08-27 10:14:38

相关问题