GUI-Interaktion

Sie haben die Möglichkeit auch über Eingaben auf der graphischen Benutzeroberfläche mit dem Benutzer zu interagieren. Maus- und/oder Tastatureingaben können dabei mit Funktionen, so genannten Callback, verknüpft werden. Je nach Typ des graphischen Elements stehen Ihnen verschiedene Callback-Einstiegspunkt zur Verfügung. Nachfolgend sind beispielhaft für verschiedene graphische Elemente die Verknüpfung mit Callbacks dargestellt.

function gui()
% (C) 2012, Datenverarbeitung in der Konstruktion, TU Darmstadt

% Author: André Picard
% Date: 26.11.2012
% Version: 1.1
%


%% Aufräumen des Workspaces
close all hidden; clear all; clc

%% Visualisieren
screensize = get(0, 'Screensize');

% Dock figure(s) in previously defined dock
set(0,'DefaultFigureWindowStyle', 'docked');
% set(0,'DefaultFigureWindowStyle', 'normal');

%% Create and manipulate figure
figureHandle = figure('name', 'Klick-GUI', ...
'NumberTitle', 'off', 'MenuBar', 'none', 'Units', 'pixels', ...
'Position', [screensize(3)/2-150, screensize(4)/2-60, 400, 200]);

% Hide figures or elements
findobj() % ans = [0 1];
set(figureHandle, 'HandleVisibility', 'off');
findobj() % ans = [0];

%% Events
set(figureHandle, 'ButtonDownFcn', @clickEvent, 'KeyPressFcn', @keyEvent);
% CreateFcn = Beim Erstellen
% DeleteFcn = Beim Löschen
% ResizeFcn = Beim Vergrößern und Verkleinern
% CloseRequestFcn = Vor dem Schließen


% WindowButtonMotionFcn = Mouse-Bewegung
% WindowScrollWheelFcn = Scroll-Rad
% WindowButtonDownFcn = Links- und Rechts-Klick (runterdrücken)
% WindowButtonUpFcn = Links- und Rechts-Klick (loslassen)
% WindowKeyPressFcn = Tastatureingabe (runterdrücken)
% WindowKeyReleaseFcn = Tastatureingabe (loslassen)


% ButtonDownFcn = wie WindowButtonDownFcn
% KeyPressFcn = wie WindowKeyPressFcn
% KeyReleaseFcn = wie WindowKeyReleaseFcn


axesHandle = axes('Parent', figureHandle, ...
'Color', [0.2 0.2 0.2], ...
'units', 'normalized', 'OuterPosition', [0.1 0.12 0.85 0.8], ...
'ButtonDownFcn', @clickEvent);
% CreateFcn
% DeleteFcn
% ButtonDownFcn

hold(axesHandle, 'on');
axis(axesHandle, [-10 10 -5 5]);
grid(axesHandle, 'on');
view(axesHandle, 3);
%rotate3d(axesHandle, 'on');

uicontrol('Parent', figureHandle, ...
'Style', 'pushbutton', 'String', 'Push', ...
'Units', 'normalized', 'Position', [0.8 0.7 0.1 0.1], ...
'Callback', @clickEvent);
% Callback = Links-Klick
% ButtonDownFcn = Mittel- und Rechts-Klick
% CreateFcn
% DeleteFcn


plot(axesHandle, [-3 -2 -1 0 1 2 3]+5, [-3 -2 -1 0 1 2 3], ...
'LineWidth', 2, 'ButtonDownFcn', @clickEvent);
% CreateFcn
% DeleteFcn
% ButtonDownFcn


[XX YY] = meshgrid([-3:3]-5, [-3:3]); ZZ = ones(7); ZZ(3:5, 3:5) = 0;
[XQ YQ] = meshgrid([-3:0.1:3]-7, [-3:0.1:3]); ZQ = griddata(XX, YY, ZZ, XQ, YQ, 'natural');
mesh(axesHandle, XQ, YQ, ZQ, 'ButtonDownFcn', @clickEvent);
% CreateFcn
% DeleteFcn
% ButtonDownFcn

end


function clickEvent(src, eventdata)
%% Klick-Event
fprintf('Das Event ausgelöst durch: %s ', get(src, 'Type'));

try
currentPoint = get(src, 'CurrentPoint');
fprintf('Der aktuelle Punkt lautet: x: %5.2f y: %5.2f ', ...
currentPoint(1,1), currentPoint(1,2));
catch
try
currentPoint = get(get(src, 'Parent'), 'CurrentPoint');
fprintf('Der aktuelle Punkt lautet: x: %5.2f y: %5.2f ', ...
currentPoint(1,1), currentPoint(1,2));
catch
fprintf('Der aktuelle Punkt konnte nicht ermittelt werden.');
end
end
end


function keyEvent(src, eventdata)
%% Detect last pressed key (also super-keys like SHIFT, ALT, CTRL)
fprintf('Das Event ausgelöst durch: %s ', get(src, 'Type'));
fprintf('Die gedrückte Taste lautet: %s ', get(src, 'CurrentCharacter'));
end