Main Content

テーブルを表示するプログラム アプリ

この例では、関数 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];

table-editable-column.png

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

ageCheckCBCellEditCallback プロパティに割り当てます。このコールバックは、ユーザーがセルの値を変更すると実行されます。ユーザーが許容範囲外の値を入力すると、コールバック関数が警告を返し、セル値が前の値に戻されます。

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: ''
         DisplaySelection: []
         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]

参考

関数

プロパティ

関連するトピック