1

나는 이미 Matlab Answers에 대해 질문했지만 응답을받지 못했습니다. 그래서 여기에서 시도해 보겠습니다.앱 디자이너에서 UITable의 값을 오른쪽으로 정렬

나는 내가보기 싫은 몇 가지 숫자가있다. 특정 형식의 값 (쉼표 뒤에 3 자리, 과학 표기법 없음)이 필요하므로 값을 문자열로 변환했습니다. 문제는이 문자열이 기본적으로 왼쪽 맞춤으로되어있어별로 좋지 않다는 것입니다.

가이드에 UITable를 사용하는 경우, I는 그 오른쪽 표의 모노 스페이스 폰트를 사용

data = {'1532.000'; ' 5.543'; ' 26.457'}; 

다음, 값은 다음과 같이 나타낸다에서처럼 정렬 얻을 공간 선도 패드 문자열 수 있었다

:

1532.000 
    5.543 
    26.457 

현재 저는 App Designer로 전환하는 것을 고려하고 있습니다. 나는 같은 스페이스 패딩 된 스트링을 사용하고 있지만 여기서는 uitable가 스트립을 제거하는 것으로 보인다. 즉, 결과는 다음과 같습니다이다 :

1532.000 
5.543 
26.457 

이 가이드에서처럼 공간을 유지하는 응용 프로그램 디자이너에서 uitable을 만들 수있는 방법이 있나요? 물론 패딩을 사용하지 않고 문자열을 직접 오른쪽 정렬하는 것이 더 좋을 수도 있지만 이것이 불가능하다는 것을 알고있는 한.

중요한 경우 : 저는 Matlab R2016b를 사용하고 있습니다.

편집 : 생성하고 UITable를 채우기

최소 예. 이것은 단순한 AppDesigner GUI로 테이블과 버튼 만 추가했습니다 (속성을 수정하지 않고). 버튼의 클릭 콜백은 데이터를 테이블에 추가하는 데 사용됩니다. AppDesigner은 나를 ButtonPushed 함수 내에서 코드를 수정 할 수 있다는

enter image description here

참고 : 다음과 같이

classdef test < matlab.apps.AppBase 

    % Properties that correspond to app components 
    properties (Access = public) 
     UIFigure matlab.ui.Figure 
     UITable matlab.ui.control.Table 
     Button matlab.ui.control.Button 
    end 

    methods (Access = private) 

     % Button pushed function: Button 
     function ButtonPushed(app, event) 
      data = {'1532.000'; ' 5.543'; ' 26.457'}; 
      app.UITable.Data = data; 
     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 640 480]; 
      app.UIFigure.Name = 'UI Figure'; 
      setAutoResize(app, app.UIFigure, true) 

      % Create UITable 
      app.UITable = uitable(app.UIFigure); 
      app.UITable.ColumnName = {'Column 1'; 'Column 2'; 'Column 3'; 'Column 4'}; 
      app.UITable.RowName = {}; 
      app.UITable.Position = [127 180 302 185]; 

      % Create Button 
      app.Button = uibutton(app.UIFigure, 'push'); 
      app.Button.ButtonPushedFcn = createCallbackFcn(app, @ButtonPushed, true); 
      app.Button.Position = [220 104 100 22]; 
     end 
    end 

    methods (Access = public) 

     % Construct app 
     function app = test() 

      % 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 

버튼을 누른 후 테이블이 보인다.

+0

[이 해결책] (http://stackoverflow.com/questions/38933254/how-to-customize-app-designer-figures-in-more-ways-than-officially-documented)을 너의 요구? 당신이 묻는 것은 거의 동일합니다. 유일한 차이점은 당신이 테이블에 대해 물어 보는 것이고, 링크 된 질문은리스트를 다루는 것입니다 ... 어떤 경우 든, 질문에 'uifigure'를 생성하는 최소한의 코드를 추가하십시오. –

+0

@ Dev-iL 고마워, 정말 유망 해 보인다. 이번 주에 시간을 보낼 수 있는지 확실하지 않지만 시간이 지나면 할 것입니다. 나는 그것을 시도했을 때보고한다. – luator

+0

@ Dev-iL 예상보다 일찍 시간을 발견했습니다. 최소한의 예가 질문에 추가됩니다. 나는 또한 시도했지만 불행히도 테이블을 다르게 처리 할 것으로 보인다 때 브라우저에서 열 때 (다른 모든 요소가 있습니다). – luator

답변

3

investigating이 잠시 후, 실제로는 Java 객체이기 때문에 uitable에 대한 "특수"동작의 이유가 발견되었습니다! (나는 그들이이 문제를 어떻게 풀어 냈는지, 왜 그걸 어떻게 풀어 냈는지 전혀 모른다.)어떤 경우에는, 오른쪽 정렬 데이터가 스크립트에 한 줄을 삽입하여 수행 할 수 있습니다

당신이하고자하는 하나 이상의 열이 있는지
data = {'1532.000'; ' 5.543'; ' 26.457'};   
app.UITable.Data = data; 
setColumnFormat(java(app.UITable),{'numeric'}); % < Add this 

이 방법을 마우스 오른쪽 정렬, 단순히 {'numeric'} 여러 번 복제 필요에 따라 :

setColumnFormat(java(app.UITable), repmat({'numeric'}, 1, size(data,2))); 

가능한 약간 짧은 표기법 (이 지적 주셔서 감사합니다 @luator) 위의 스타일링 명령에 대한도 있습니다 :

app.UITable.ColumnFormat = {'numeric'}; 
app.UITable.ColumnFormat = repmat({'numeric'}, 1, size(data,2)); 

결과 :

Demonstration

난 당신이 "JIDE 표", 또는 SortableTable을 찾고 이러한 테이블 오브젝트의 사용자 정의에 대한 자세한 정보를 찾을 수 있습니다, 제대로 Yair의 블로그를 이해합니다.

+0

문자열의 숫자 서식 (예 : 소수점 세 자리, 과학적 표기법 없음)을 그대로 유지하면서 실제로 데이터를 오른쪽 정렬합니다. 지금 당신의 코드는 첫 번째 열에 만 영향을 미칩니다 (실제 응용 프로그램에 여러 열이 있음).하지만 확장하기가 쉬워야합니다. (다시는 시간이 없지만 솔루션을 찾으면 알려줄 것입니다) . – luator

+0

@luator - 솔루션을 확장하여 여러 컬럼에 영향을주었습니다. –

+1

많은 노력을 가져 주셔서 감사합니다! 나는 당신의 코드를 약간 단순화 할 수 있었다 :'app.UITable.ColumnFormat = repmat (...);'은 같은 효과를 가진다. – luator