テーブルを表示するプログラム アプリ
この例では、関数 uitable
を使用してアプリにテーブルを表示する方法を説明します。また、テーブルの外観を変更する方法と、実行中のアプリでテーブルの編集を制限する方法を示します。
Figure 内でのテーブル UI コンポーネントの作成
関数 uitable
は、Figure 内に空の UI テーブルを作成します。
fig = uifigure('Position',[100 100 752 250]); uit = uitable('Parent',fig,'Position',[25 50 700 200]);
混在するデータ型を含むテーブルの作成
混在するデータ型を含む患者データのサンプルを読み込み、それを table 配列に保存します。データを、テーブル コンポーネントのセル内のドロップダウン リストとして表示するには、cell 配列変数を categorical 配列に変換します。データをテーブル UI コンポーネントに表示するには、table 配列を Data
プロパティの値として指定します。
load patients t = table(LastName,Age,Weight,Height,Smoker, ... SelfAssessedHealthStatus); t.SelfAssessedHealthStatus = categorical(t.SelfAssessedHealthStatus, ... {'Poor','Fair','Good','Excellent'},'Ordinal',true); uit.Data = t;
表示のカスタマイズ
UI テーブルの表示をいくつかの方法でカスタマイズすることができます。列見出しを追加するには、ColumnName
プロパティを使用します。
uit.ColumnName = {'Last Name','Age','Weight', ... 'Height','Smoker','Health Status'};
列の幅を調整するには、ColumnWidth
プロパティを指定します。ColumnWidth
プロパティは 1 行 N 列の cell 配列で、N はテーブルの列数です。特定の列の幅を設定するか、'auto'
を使用して、内容を基に MATLAB® に幅を設定させます。
uit.ColumnWidth = {'auto',75,'auto','auto','auto',100};
RowName
プロパティを 'numbered'
に設定することで、番号付きの行見出しを追加します。
uit.RowName = 'numbered';
Position
プロパティを使用してテーブルの位置とサイズを変更します。
uit.Position = [15 25 565 200];
既定では、テーブル UI コンポーネントは行のストライプ配色を使い、指定した背景色がテーブルの終わりまで繰り返されます。RowStriping
プロパティを 'off'
に設定すると、テーブル UI コンポーネントは BackgroundColor
プロパティで指定された最初の色のみをすべての行に使用します。ここでは、行のストライプ配色を 'on'
のままとし、BackgroundColor
プロパティに 3 つの異なる色を設定します。
uit.BackgroundColor = [1 1 .9; .9 .95 1;1 .5 .5];
列の並べ替えの有効化とセル値の編集の制限
テーブル内のデータを編集するユーザーの権限を制限するには、ColumnEditable
プロパティを設定します。既定では、実行中のアプリでデータを編集することはできません。列の ColumnEditable
プロパティを true
に設定すると、その列のデータが編集可能になります。
uit.ColumnEditable = [false true true true true true];
ColumnSortable
プロパティを true
に設定することで、すべての列を並べ替え可能にします。列が並べ替え可能である場合、ヘッダーにカーソルを合わせると矢印が表示されます。
uit.ColumnSortable = true;
コールバックの作成
ユーザーの操作にテーブルが応答するようにプログラムするには、コールバック関数を作成します。たとえば、SelectionChangedFcn
を指定して、アプリ ユーザーがテーブル内で別の行、列、またはセルを選択したときにコマンドを実行できます。
ここでは、Age
列の値が 0 ~ 120 の範囲内であることを検証するコールバック関数を記述します。ageCheckCB
という名前の新しい関数を作成し、MATLAB パス上のフォルダーに ageCheckCB
というファイル名で保存します。
function ageCheckCB(src,event) if (event.Indices(2) == 2 && ... % check if column 2 (event.NewData < 0 || event.NewData > 120)) tableData = src.Data; tableData{event.Indices(1),event.Indices(2)} = event.PreviousData; src.Data = tableData; % revert the data warning('Age must be between 0 and 120.') % warn the user end
ageCheckCB
を CellEditCallback
プロパティに割り当てます。このコールバックは、ユーザーがセルの値を変更すると実行されます。ユーザーが許容範囲外の値を入力すると、コールバック関数が警告を返し、セル値が前の値に戻されます。
uit.CellEditCallback = @ageCheckCB;
コールバック関数の記述の詳細については、プログラムで作成したアプリ用のコールバックの作成を参照してください。
すべてのテーブル プロパティの取得
テーブルのすべてのプロパティを確認するには、get
コマンドを使用します。
get(uit)
BackgroundColor: [3x3 double] BeingDeleted: off BusyAction: 'queue' ButtonDownFcn: '' CellEditCallback: @ageCheckCB CellSelectionCallback: '' Children: [0x0 handle] ClickedFcn: '' ColumnEditable: [0 1 1 1 1 1] ColumnFormat: {} ColumnName: {6x1 cell} ColumnRearrangeable: off ColumnSortable: 1 ColumnWidth: {'auto' [75] 'auto' 'auto' 'auto' [100]} ContextMenu: [0x0 GraphicsPlaceholder] CreateFcn: '' Data: [100x6 table] DeleteFcn: '' DisplayData: [100x6 table] DisplayDataChangedFcn: '' DoubleClickedFcn: '' Enable: 'on' Extent: [0 0 312.5000 312.5000] FontAngle: 'normal' FontName: 'Helvetica' FontSize: 12 FontUnits: 'pixels' FontWeight: 'normal' ForegroundColor: [0 0 0] HandleVisibility: 'on' InnerPosition: [15 25 565 200] Interruptible: on KeyPressFcn: '' KeyReleaseFcn: '' Layout: [0x0 matlab.ui.layout.LayoutOptions] Multiselect: on OuterPosition: [15 25 565 200] Parent: [1x1 Figure] Position: [15 25 565 200] RowName: 'numbered' RowStriping: on Selection: [] SelectionChangedFcn: '' SelectionType: 'cell' StyleConfigurations: [0x3 table] Tag: '' Tooltip: '' Type: 'uitable' Units: 'pixels' UserData: [] Visible: on