MATLAB выбор даты всплывающий календарь для графического интерфейса - PullRequest
6 голосов
/ 16 апреля 2010

Кто-нибудь знает способ отображения всплывающего календаря выбора даты в графическом интерфейсе MATLAB? Я знаю, что финансовый набор инструментов имеет функцию uicalendar, но, к сожалению, у меня нет этого набора инструментов.

У меня есть предчувствие, я собираюсь использовать для этого язык Java или другой язык, о котором я ничего не знаю.

Я ищу что-то похожее на это: альтернативный текст http://www.welie.com/patterns/images/date-selector-expedia-small.png

, которая будет возвращать строку даты после того, как пользователь выберет дату.

Ответы [ 4 ]

6 голосов
/ 17 апреля 2010

Вот два подхода, которые дадут вам профессионально выглядящий компонент календаря в Matlab без излишней работы по программированию:

  1. Используйте компонент календаря Java (например, один из этих или этих ). Как только вы загрузите соответствующий класс Java или Jar-файл, добавьте его в статический путь к классу Java (используйте команду edit('classpath.txt') из командной строки Matlab). Наконец, используйте встроенную функцию javacomponent , чтобы поместить компонент в окно фигуры Matlab.

  2. Если вы используете ОС Windows, вы можете встроить любой доступный элемент управления календаря Active-X . Используйте встроенную функцию actxcontrolselect , чтобы выбрать свой любимый элемент управления календарем (например, «Управление календарем 11.0» в Microsoft Office - MSCAL.Calendar.7 - которое автоматически устанавливается вместе с Office 2003). или «Элемент управления датой и временем Microsoft 6.0» - MSComCtl2.DTPicker.2, или ...). Затем используйте функцию actxcontrol , чтобы поместить компонент в окно фигуры Matlab.

  3. В Matlab есть несколько довольно полезных встроенных элементов управления календарем (выбор даты) - я опубликовал статью о них сегодня

4 голосов
/ 14 июня 2010

Функция uigetdate в Mathworks File Exchange также является хорошим решением:

http://www.mathworks.com/matlabcentral/fileexchange/8313-uigetdate

4 голосов
/ 17 апреля 2010

К сожалению, у меня не так много времени для более полного ответа, но я бы попытался 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'});
4 голосов
/ 16 апреля 2010

Я бы начал с функции calendar () , которая выводит матрицу, содержащую календарь на любой месяц. Я полагаю, вы могли бы объединить это с пользовательским интерфейсом для получения определенной даты?

Следующий код действительно ужасен, но может помочь вам начать ...

 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
...