2012-04-28 15 views
2

ここではこのチュートリアルに従っています:Link to tutorial。私はアプリケーションを正しく表示するように見えることはできません。私は、アプリケーションを実行すると、私はチュートリアルからCalendarCanvasのような画面を見ることを期待し、私はこれを取得:ここ Java MEのカレンダーが表示されない

enter image description here

が私のコードで、私は標準MIDPクラスを使用しています。

クラスCreateCalendar:

import java.util.Date; 
import java.util.Calendar; 
import javax.microedition.lcdui.*; 
import javax.microedition.midlet.MIDlet; 


public class CreateCalendar 
{ 
    /** 
    * Array of strings which holds data for the month and day 
    * for the calendar application. 
    */ 
    static final String[] month_labels = new String[] 
    { 
     "January", "Febuary", "March", "April", "May", "June", "July", "August", "Sepetember", "October", "November", "Decemeber" 
    }; 
    static final String[] weekdays_labels = new String[] 
    { 
     "Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun" 
    }; 

    public int startWeekday = 0; 
    public int padding = 1; 
    public int borderWidth = 4; 
    public int borderColor = 0x009900; 

    /** 
    * Weekday Labels 
    */ 
    public Font weekdayFont = Font.getDefaultFont(); 
    public int weekdayBackgroundColor = 0x009900; 
    public int weekdayColor = 0xffffff; 

    /** 
    * Month/Year Labels 
    */ 
    public Font headerFont = Font.getDefaultFont(); 
    public int headerBackgroundColor = 0x009900; 
    public int headerColor = 0xffffff; 

    /** 
    * Cells Labels 
    */ 
    public Font font = Font.getDefaultFont(); 
    public int foreColor = 0xffffff; 
    public int backgroundColor = 0x009900; 
    public int selectedBackgroundColor = 0xCCFF00; 
    public int selectedForegroundColor = 0xffffff; 

    /** 
    * Size properties 
    */ 
    int width = 0; 
    int height = 0; 
    int headerHeight = 0; 
    int weekHeight = 0; 
    int cellWidth = 0; 
    int cellHeight = 0; 

    /** 
    * Internal time properties 
    */ 
    long currentTimeStamp = 0; 
    Calendar calendar = null; 
    int weeks = 0; 

    public CreateCalendar(Date date) 
    { 
    calendar = Calendar.getInstance(); 
    setDate(date); 
    initialize(); 
    } 

    public Date getSelectedDate() 
    { 
     return calendar.getTime(); 
    } 

    public void setDate(Date d) 
    { 
     currentTimeStamp = d.getTime(); 
     calendar.setTime(d); 
     this.weeks = (int)Math.ceil(((double)getStartWeekday() + getMonthDays())/7); 
    } 

    public void setDate(long timestamp) 
    { 
     setDate(new Date(timestamp)); 
    } 

    public void initialize() 
    { 
     this.cellWidth = font.stringWidth("MM") + 2 * padding; 
     this.cellHeight = font.getHeight() + 2 * padding; 
     this.headerHeight = headerFont.getHeight() + 2 * padding; 
     this.weekHeight = weekdayFont.getHeight() + 2 * padding; 
     this.width = 7 * (cellWidth + borderWidth) + borderWidth; 
     initHeight(); 
    } 

    void initHeight() 
    { 
     this.height = headerHeight + weekHeight + this.weeks * (cellHeight + borderWidth) + borderWidth; 
    } 

    int getMonthDays() 
    { 
     int month = calendar.get(Calendar.MONTH); 
     switch (month) 
     { 
      case 3: 
      case 5: 
      case 8: 
      case 10: 
       return 30;  
      case 1: 
       int year = calendar.get(Calendar.YEAR); 
       return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ? 29 : 28; 
      default: 
       return 31; 
     } 
    } 

    int getStartWeekday() 
    { 
     Calendar c = Calendar.getInstance(); 
     c.set(Calendar.MONTH, calendar.get(Calendar.MONTH)); 
     c.set(Calendar.YEAR, calendar.get(Calendar.YEAR)); 
     c.set(Calendar.DAY_OF_MONTH, 1); 
     return (c.get(Calendar.DAY_OF_WEEK) + 5) % 7; 
    } 

    public void KeyPressed(int key) 
    { 
     switch(key) 
     { 
      case Canvas.UP: 
       go(-7); 
       break; 
      case Canvas.DOWN: 
       go(7); 
       break; 
      case Canvas.RIGHT: 
       go(1); 
       break; 
      case Canvas.LEFT: 
       go(-1); 
       break; 
     } 
    } 

    void go(int delta) 
    { 
     int prevMonth = calendar.get(Calendar.MONTH); 
     setDate(currentTimeStamp + 864000000 * delta); 
     if(calendar.get(Calendar.MONTH) != prevMonth) 
     { 
      initHeight(); 
     } 
    } 

    public void paint(Graphics g) 
    { 
     g.setColor(backgroundColor); 
     g.fillRect(0, 0, width, height); 
     g.setFont(headerFont); 
     g.setColor(headerColor); 
     g.drawString(month_labels[calendar.get(Calendar.MONTH)] + " " + calendar.get(Calendar.YEAR), width/2, padding, Graphics.TOP | Graphics.HCENTER); 
     g.translate(0, headerHeight); 
     g.setColor(weekdayBackgroundColor); 
     g.fillRect(0, 0, width, weekHeight); 
     g.setColor(weekdayColor); 
     g.setFont(weekdayFont); 

     for(int i = 0; i < 7; i++) 
     { 
      g.drawString(weekdays_labels[(i + startWeekday) % 7], borderWidth + i * (cellWidth + borderWidth) + cellWidth/2, padding, Graphics.TOP | Graphics.HCENTER); 
     } 

     g.translate(0, weekHeight); 
     g.setColor(borderColor); 

     for(int i = 0; i <= weeks; i++) 
     { 
      g.fillRect(0, i * (cellHeight + borderWidth), width, borderWidth); 
     } 
     for(int i = 0; i <=7; i++) 
     { 
      g.fillRect(i * (cellWidth + borderWidth), 0, borderWidth, height - headerHeight - weekHeight); 
     } 

     int days = getMonthDays(); 
     int dayIndex = (getStartWeekday() - this.startWeekday + 7) % 7; 
     g.setColor(foreColor); 
     int currentDay = calendar.get(Calendar.DAY_OF_MONTH); 

     for(int i = 0; i < days; i++) 
     { 
      int weekday = (dayIndex + i) % 7; 
      int row = (dayIndex + i)/7; 
      int x = borderWidth + weekday * (cellWidth + borderWidth) + cellWidth/2; 
      int y = borderWidth + row * (cellHeight + cellWidth) + padding; 

      if(i + 1 == currentDay) 
      { 
       g.setColor(selectedBackgroundColor); 
       g.fillRect(borderWidth + weekday * (cellWidth + borderWidth), borderWidth + row * (cellHeight + borderWidth), cellWidth, cellHeight); 
       g.setColor(selectedForegroundColor); 
      } 

      g.drawString("" + (i + 1), x, y, Graphics.TOP | Graphics.HCENTER); 

      if(i + 1 == currentDay) 
      { 
       g.setColor(foreColor); 
      } 
     } 
     g.translate(0, - headerHeight - weekHeight); 
    } 

    private Date getTime() { 
     throw new UnsupportedOperationException("Not yet implemented"); //TODO get current Time 
    } 

クラスCalFrontEnd(MIDletの拡張):

public class CalFrontEnd extends MIDlet 
{ 

    public CreateCalendar calendar; 
    protected Display display; 
    protected Form mainForm; 

    public CalFrontEnd() 
    { 

    } 

    public void startApp() 
    { 
     calendar = new CreateCalendar(new Date()); 
     calendar.headerFont = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_LARGE); 
     calendar.weekdayFont = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_MEDIUM); 
     calendar.weekdayBackgroundColor = 0xccccff; 
     calendar.weekdayColor = 0x0000ff; 
     calendar.headerColor = 0xffffff; 
     calendar.initialize(); 


    display.getDisplay(this).setCurrent(
    new intCalendar(this)); 

    } 

    public void pauseApp() 
    { 
    } 

    public void destroyApp(boolean destroy) 
    { 
    notifyDestroyed(); 
    } 
}} 
+0

最初に間違っている可能性が高いのは、メソッドKeyPressedの名前です。 Javaでは大文字と小文字が区別され、参照するチュートリアルでは 'keyPressed'が小文字の' k'で始まります。これはCanvas APIと一致するために重要です。また、あなたの[コードスニペット](http://www.sscce.org/)は、新しいintCalendar(this)で何が起こっているのかを知ることができません。 ' - 何がうまくいかないのか理解できない – gnat

答えて

1

コードクラスのCreateCalendar非常に問題を探します。 prior question

あなたはいくつかのマイナーな変数名の違いチュートリアルからコードに行わを述べたが、あなたのコードスニペットに示されているものから、これはそうではありません。

チュートリアルコードを再利用する方法を見つけるには、最も簡単なアプローチは次のようになります。そのままファイルCalendarWidget.javaとCalendarCanvas.java
コピー、必要な場合にのみ、パッケージ文を調整 -

  1. コピーはチュートリアルからソースコード。必要に応じて

    • を次のようにおよそ

    • 変更CalFrontEndは、このように、CalendarCanvasための最も簡単な呼び出しににstartAppで現在のコードを置き換えCalendarCanvas

    • のインポート文を追加:
       
      public void startApp() { 
          Display.getDisplay(this).setCurrent(
            new CalendarCanvas(this)); 
      }
  2. テストあなたのMIDletがCalendarCanvasの予想を表示するまでコードを調整して修正してください

  3. 上記の操作が完了したら、必要に応じてコードを修正します。
    変更をテストして、実際に期待どおりに動作することを忘れないでください。
関連する問題