Java Blackberry刷新字段标签

时间:2011-12-17 14:14:46

标签: blackberry user-interface java-me blackberry-simulator blackberry-jde

我有一个主类和一个屏幕类。我有一个启动日期选择器的按钮。当datepicker关闭时,我需要使用所选值刷新按钮的标签。我该怎么做?

我尝试使用invalidate,创建一个实现不同onFocus,onUnFocus和其他一些东西的CustomButtonField,但我想我是以错误的方式实现它们......

我的两个分支是这些......

...主

public class TestClass extends UiApplication
{
    public static Calendar alarm1time = Calendar.getInstance(TimeZone.getTimeZone("GMT-3"));

    public static void main(String[] args)
    {
        TestClass testClass = new TestClass (); 
        testClass.enterEventDispatcher();
    }

    public TestClass()
    {
        pushScreen(new TestClassScreen());
    }
}

画面...

public final class TestClassScreen extends MainScreen
{
    public TestClassScreen()
    {
        ButtonField alarm1 = new ButtonField("Alarm : " + TestClass.alarm1time.get(Calendar.HOUR_OF_DAY) + ":" + TestClass.alarm1time.get(Calendar.MINUTE) ,ButtonField.FOCUSABLE)
        {
            public boolean navigationClick (int status , int time)
            {
                datePicker(1);
                return true;
            }
        };
        setTitle("Test Alarm");
        add(new RichTextField(" "));
        add(alarm1 );
    }

    public void datePicker(final int alarmNumber)
    {
        UiApplication.getUiApplication().invokeLater(new Runnable()
        {
            public void run()
            {
                DateTimePicker datePicker = null;
                datePicker = DateTimePicker.createInstance(TestClass.alarm1time, null, "HH:mm");
                if(datePicker.doModal())
                {
                    Calendar cal = datePicker.getDateTime();
                    TestClass.alarm1time = cal;
                    //Here I need the label to be refreshed, after the datePicker is Ok
                }
            }
        });
    }
}

2 个答案:

答案 0 :(得分:0)

我在Blackberry发展论坛中找到了一种方式......

public boolean navigationClick (int status , int time)
{
    datePicker(1, this);
    return true;
}

public void datePicker(final int alarmNumber, final ButtonField buttonToUpdate)
{
    UiApplication.getUiApplication().invokeLater(new Runnable()
    {
        public void run()
        {
            DateTimePicker datePicker = null;
            datePicker = DateTimePicker.createInstance(TestClass.alarm1time, null, "HH:mm");
            if(datePicker.doModal())
            {
                Calendar cal = datePicker.getDateTime();
                TestClass.alarm1time = cal;
                buttonToUpdate.setLabel(....)
            }
        }
    });
}

更常见的方法是让更改侦听器侦听Button Clicks并在其中执行类似的处理。

答案 1 :(得分:0)

我认为,这有助于您:

public class Def extends MainScreen
{   
ButtonField show;
LabelField label;
String str="";
ObjectChoiceField choiceField;
public Def() 
{
    createGUI();
}

private void createGUI()
{   
    String st_ar[]={"Date Picker"};
    choiceField=new ObjectChoiceField("Select Date: ", st_ar)
    {
        protected boolean navigationClick(int status, int time) 
        {
            DateTimePicker datePicker = DateTimePicker.createInstance( Calendar.getInstance(), "yyyy-MM-dd", null);
            datePicker.doModal();
            Calendar calendar=datePicker.getDateTime();
            str=String.valueOf(calendar.get(Calendar.DAY_OF_MONTH))+"-"+String.valueOf(calendar.get(Calendar.MONTH)+1)+"-"+calendar.get(Calendar.YEAR);
            return true;
        }
    };
    add(choiceField);       

    label=new LabelField("",Field.NON_FOCUSABLE);
    add(label);

    show=new ButtonField("Show");
    show.setChangeListener(new FieldChangeListener() 
    {
        public void fieldChanged(Field field, int context) 
        {
            label.setText("Time is: "+str);
        }
    });
    add(show);
}
}