Всплывающий календарь выбора даты MATLAB для графического интерфейса пользователя

#user-interface #matlab #calendar #datepicker

#пользовательский интерфейс #matlab #Календарь #выбор даты

Вопрос:

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

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

Я ищу что-то похожее на это: текст alt
(источник: welie.com)

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

Комментарии:

1. Спасибо за все ответы! Я решу, какой из них принять, когда приступлю к тестированию различных подходов.

Ответ №1:

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

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

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

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

Комментарии:

1. @Yair Altman: Javacomponent, похоже, недокументирован. Будучи совершенно незнакомым с использованием java в MATLAB, не могли бы вы объяснить входные параметры?

Ответ №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(), которая выводит матрицу, содержащую календарь за любой месяц. Я полагаю, вы могли бы объединить это с интерактивным интерфейсом для получения определенной даты?

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

  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
  

Комментарии:

1. Вы можете вставить dates(all(dates==0,2),:)=[]; после вызова calendar(), чтобы исключить строку со всеми нулями.

2. И [NB_ROWS,NB_COLS] = size(dates);

3. Хорошие моменты. Сегодня я немного занят, но не стесняйтесь редактировать соответствующим образом 🙂

4. Ваше решение намного красивее, чем использование uitable, но я думаю, что с uitable будет гораздо менее сложно иметь дело.