【问题标题】:Codename one calendar UpdateButtonDayDate() issue代号一日历 UpdateButtonDayDate() 问题
【发布时间】:2017-04-07 07:33:13
【问题描述】:

我正在处理我的项目,我想在应用程序启动时显示日历显示,哪个日期包含事件,例如,如果日期包含事件,那么日期按钮包含 * 符号和日期,如果日期没有t 包含任何事件,那么它只显示一天。 我写了下面的代码,但是当我点击那个按钮时它只显示*符号,那么我该如何管理这个在日期显示*符号的代码,它只包含应用程序启动或加载页面时的事件。

以下是我的代码:-

    public class Customised extends Calendar{
          ArrayList<String[]> data = new ArrayList<>();
          int i,j,columns;



          @Override
          protected void updateButtonDayDate(Button dayButton,int currentMonth, int day) {
         dayButton.setText(""+day);



          dayButton.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent evt) {     
//Check which date having how many number of events===============================================================

          try{
              ShowEvent.removeAll();
          cur =  db.executeQuery("SELECT Event, Description from CalendarData  WHERE Date = ? ", dateLabel.getText());
          columns = cur.getColumnCount();
          if(columns > 0) {
          boolean next = cur.next();
          if(next) {               
          String[] columnNames = new String[columns];
          for(int iter = 0 ; iter < columns ; iter++) {
          columnNames[iter] = cur.getColumnName(iter);
          }
          while(next) {
          Row currentRow = cur.getRow();
          String[] currentRowArray = new String[columns];
          for(int iter = 0 ; iter < columns ; iter++) {
          currentRowArray[iter] = currentRow.getString(iter);
          }
          data.add(currentRowArray);
          next = cur.next();
          }
          Object[][] arr = new Object[data.size()][];
          data.toArray(arr);
          }
          }
          }catch(IOException e){
          e.printStackTrace();
          }
          for(i = 0 ; i< data.size(); i++){
          Log.p(data.get(i)[0]);
          }

          Label a = new Label(dateLabel.getText());
          Label b = new Label("          "+i);
          Container container1 = TableLayout.encloseIn(2, a,b);
          container1.setUIID("container1");

          ShowEvent.add(container1);


              for( i = 0 ; i< data.size(); i++){
              for(j = 0; j<columns; j++){
          Log.p(data.get(i)[j]);
          SpanLabel spanData = new SpanLabel(data.get(i)[j]);
          spanData.setUIID("SpanLabel");
          ShowEvent.add(spanData);    
          }
          Label space = new Label("=======================");
          ShowEvent.add(space);
          Log.p("###################");
          }
          data.clear();

          if(i>0){
              if(Dialog.show("Choose action", "What you want to do?", "Add Events","View Events")){
                  calendar.show();
              }
                  else{
                  ShowEvent.show();
              }
          }else{
              Dialog.show("Add event","There is no event to display, Please add events first","OK","");

          }
//============================================================================================================
          } 
          });
          }

          @Override
          protected void initComponent(){
              ArrayList<String[]> data1 = new ArrayList<>();
              int k;
              Log.p("initComponent");

             try{
              cur = db.executeQuery("select Date from CalendarData");
              columns = cur.getColumnCount();
          if(columns > 0) {
          boolean next = cur.next();
          if(next) {               

          String[] columnNames = new String[columns];
          for(int iter = 0 ; iter < columns ; iter++) {
          columnNames[iter] = cur.getColumnName(iter);
          }
          while(next) {
          Row currentRow = cur.getRow();
          String[] currentRowArray = new String[columns];
          for(int iter = 0 ; iter < columns ; iter++) {
          currentRowArray[iter] = currentRow.getString(iter);
          }
          data1.add(currentRowArray);
          next = cur.next();
          }
          Object[][] arr = new Object[data1.size()][];
          data1.toArray(arr);
          }
          }
          }catch(IOException e){
          e.printStackTrace();
          }
          for(k = 0 ; k< data1.size(); k++){
          Log.p(data1.get(k)[0]);

            }
          if(k>0){
              //cal.setUIID("CalendarSelectedDay");
          }

          }

          /*
          @Override
          protected boolean isInitialized(){
              boolean result = false;
              Log.p("isInitialised");
              return result;
          }*/

          public Customised(){

          }





          @Override
          protected Button createDay() {
          Button day = new Button();
          day.setAlignment(CENTER);
          day.setUIID("CalendarDay1");
          day.setEndsWith3Points(false);
          day.setTickerEnabled(false);
          return day;
          }



          }

预期的结果将是:-

【问题讨论】:

    标签: java android sqlite oop codenameone


    【解决方案1】:

    那是因为您将代码放在 actionPerformed 方法中,该方法仅在 Button 按下/释放时触发。 将您的代码移动到 updateButtonDayDate 范围

    【讨论】:

    • 当我在 updateButtonDayDate 范围内复制该代码时,它将获得 'i' 值 0。因此它不会进入该 if 循环。
    • 有人知道怎么做吗?
    • 如果您声称@Chen 的建议不起作用,请更新您的问题以显示代码的当前状态。查看您现有的代码有两个大问题:1)每次调用 updateButtonDayDate() 时都添加一个动作侦听器,并且您似乎永远不会删除它们,每次按钮单击都会调用多个动作侦听器。 2)您添加星号的代码仅在单击按钮时运行。
    • 假设如果我在 updateButtonDayDate () 范围内编写相同的代码,那么如何访问 dayButton 以动态更改按钮样式或为 dayButton 提供星号。
    • 我假设您首先显示您的 UI,然后您可能会使用数据初始化您的数据库。如果是这种情况,请确保在显示日历之前初始化数据库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多