【问题标题】:MATLAB date selection popup calendar for gui用于 gui 的 MATLAB 日期选择弹出日历
【发布时间】:2011-02-08 23:28:53
【问题描述】:

有人知道在 MATLAB gui 中显示弹出日期选择日历的方法吗?我知道金融工具箱有一个uicalendar 功能,但不幸的是我没有那个工具箱。

我有一种预感,我将不得不为此使用一些 Java 或其他语言,对此我一无所知。

我正在寻找类似的东西:
(来源:welie.com

在用户选择日期后会返回一个日期字符串。

【问题讨论】:

  • 感谢您的所有回答!当我开始测试各种方法时,我会决定接受哪一种。

标签: user-interface matlab calendar datepicker


【解决方案1】:

以下两种方法可以在 Matlab 中为您提供具有专业外观的日历组件,而无需过多的编程工作:

  1. 使用 Java 日历组件(例如,thesethese 之一)。下载相关的 Java 类或 Jar 文件后,将其添加到静态 Java 类路径(使用 Matlab 命令提示符中的 edit('classpath.txt') 命令)。最后,使用内置的 javacomponent 函数将组件放置在您的 Matlab 图形窗口中。

  2. 如果您使用的是 Windows 操作系统,则可以嵌入任何可用的 Active-X 日历控件。使用内置的 actxcontrolselect 功能选择您喜欢的日历控件(例如,Microsoft Office 的“日历控件 11.0” - MSCAL.Calendar.7 - 自动安装Office 2003;或“Microsoft 日期和时间选择器控件 6.0”- MSComCtl2.DTPicker.2,或...)。然后使用 actxcontrol 函数将组件放置在您的 Matlab 图形窗口中。

  3. Matlab 有一些非常有用的内置日历(日期选择)控件 - 我今天发布了 an article about them

【讨论】:

  • @Yair Altman :Javacomponent 似乎没有记录。完全不熟悉在MATLAB中使用java,能解释一下输入参数吗?
【解决方案2】:

很遗憾,我没有太多时间提供更完整的答案,但我会尝试使用uitable 创建一个表格并定义CellSelectionCallback 以获取日期。

这里有一些帮助您入门:

dates = calendar;
dates(~any(dates,2),:) = [];
fh = figure;
uh = uitable('parent',fh,'data',dates,'ColumnWidth',repmat({20},1,7),...
             'ColumnName',{'S','M','T','W','T','F','S'});

【讨论】:

    【解决方案3】:

    我将从calendar() function 开始,它输出一个包含任何月份日历的矩阵。我假设您可以将其与用户可点击的界面结合起来以检索特定日期?

    下面的代码真的很丑,但可以帮助你开始......

     WINDOW_WIDTH = 300;
     WINDOW_HEIGHT = 200;
    f= figure('Position',[300 300 WINDOW_WIDTH WINDOW_HEIGHT]);
    
     NB_ROWS = 6;
     NB_COLS = 7;
     width = round(WINDOW_WIDTH/NB_COLS);
     height = round(WINDOW_HEIGHT/NB_ROWS);
     buttons = nan(NB_ROWS,NB_COLS);
     dates = calendar();
    
     for row = 1:NB_ROWS
        for col = 1:NB_COLS
           if dates(row,col) == 0
              mydate = '';
           else
              mydate = sprintf('%i', dates(row,col));
           end
           buttons(row,col) = uicontrol('Style', 'PushButton', ...
              'String', mydate, ...
              'Position', [(col-1)*width (NB_ROWS - row)*height width height]);
        end
     end
    

    【讨论】:

    • 您可以在 calendar() 调用之后插入dates(all(dates==0,2),:)=[]; 以消除全零的行。
    • 还有[NB_ROWS,NB_COLS] = size(dates);
    • 好点。我今天有点忙,但请随时进行相应的编辑:)
    • 您的解决方案比使用 uitable 要漂亮得多,但我认为 uitable 处理起来不会那么混乱。
    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2019-07-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多