StackOverflow!
Я рад сообщить, что мне удалось создать ListBox, который заполняется именами файлов в зависимости от выбора моей папки. Тем не менее, я столкнулся с довольно препятствием.
Я хочу отображать данные в зависимости от выбора в списке. В настоящее время моя программа MATLAB выполняет следующие действия: 1. Пользователь может «Искать» нужную папку с помощью функции PshButton. 2. После выбора папки список будет перечислять каждый файл, содержащий данные GPX, в список. 3. Я хочу иметь возможность выбрать файл из указанного списка и отобразить данные с помощью другого обратного вызова PushButton.
Моя проблема в том, что я не знаю, как установить это соединение программно. Я думал, что это будет так же просто, как установить ItemsData для данных, найденных в каждой папке. Может быть, я не пойду правильно.
Ниже приведен мой код:
classdef HalloweenApp < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure
SearchButton matlab.ui.control.Button
FoldernameEditFieldLabel matlab.ui.control.Label
FoldernameEditField matlab.ui.control.EditField
DataListBoxLabel matlab.ui.control.Label
DataListBox matlab.ui.control.ListBox
PlotButton matlab.ui.control.Button
end
properties (Access = public)
gpxfolder % Selected file path for GPX folder
gpxfiles % Folder with GPX files
chosenfile % The specific file for plot
n % Number of files in the folder
data % Cell array of information that will be loaded
end
methods (Access = private)
% Button pushed function: SearchButton
function SearchButtonPushed(app, event)
app.gpxfolder = uigetdir(); % Open dialog box for selecting folder.
app.gpxfiles = dir(fullfile(app.gpxfolder, '*.gpx')); % Dir all *gpx in selected folder.
% Number of files in that folder.
app.n = numel(app.gpxfiles);
app.FoldernameEditField.Value = app.gpxfolder;
% Populate Listbox with file names
app.DataListBox.Items = {app.gpxfiles(:).name};
app.data = cell(1,app.n);
for k=1:app.n
hold all
% Creates a colormap based on the amount of files we have
cmap = hsv(k);
% Read each file
app.data{k} = gpxread(fullfile(app.gpxfolder, app.gpxfiles(k).name));
baseFileName = app.gpxfiles(k).name;
fullFileName = fullfile(app.gpxfolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
end
end
% Button pushed function: PlotButton
function PlotButtonPushed(app, event)
app.chosenfile = app.DataListBox.Value;
assignin('base','chosenfile',app.chosenfile)
**app.DataListBox.ItemsData = app.data{k};**
end
end
% App initialization and construction
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create UIFigure
app.UIFigure = uifigure;
app.UIFigure.Position = [100 100 914 678];
app.UIFigure.Name = 'UI Figure';
% Create SearchButton
app.SearchButton = uibutton(app.UIFigure, 'push');
app.SearchButton.ButtonPushedFcn = createCallbackFcn(app, @SearchButtonPushed, true);
app.SearchButton.Position = [568 633 100 22];
app.SearchButton.Text = 'Search';
% Create FoldernameEditFieldLabel
app.FoldernameEditFieldLabel = uilabel(app.UIFigure);
app.FoldernameEditFieldLabel.HorizontalAlignment = 'right';
app.FoldernameEditFieldLabel.Position = [22 637 77 15];
app.FoldernameEditFieldLabel.Text = 'Folder name:';
% Create FoldernameEditField
app.FoldernameEditField = uieditfield(app.UIFigure, 'text');
app.FoldernameEditField.Position = [114 633 431 22];
% Create DataListBoxLabel
app.DataListBoxLabel = uilabel(app.UIFigure);
app.DataListBoxLabel.HorizontalAlignment = 'right';
app.DataListBoxLabel.Position = [65 584 34 15];
app.DataListBoxLabel.Text = 'Data:';
% Create DataListBox
app.DataListBox = uilistbox(app.UIFigure);
app.DataListBox.Items = {};
app.DataListBox.Multiselect = 'on';
app.DataListBox.Position = [114 527 431 74];
app.DataListBox.Value = {};
% Create PlotButton
app.PlotButton = uibutton(app.UIFigure, 'push');
app.PlotButton.ButtonPushedFcn = createCallbackFcn(app, @PlotButtonPushed, true);
app.PlotButton.Position = [445 495 100 22];
app.PlotButton.Text = 'Plot';
end
end
methods (Access = public)
% Construct app
function app = HalloweenApp
% Create and configure components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.UIFigure)
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.UIFigure)
end
end
end
Я подтолкнул строку в своем коде, которая, по моему мнению, вызывает проблемы.