0

私のmatlabコードでJava GUIを使用しようとしています。多くのボタンを含む Jpanel を作成し、この Jpanel を JscrollPane に追加して、Jpanel を上下左右にスクロールできるようにしたいと考えています。で説明されているように JavaComponent() 関数を使用してみました: http://undocumentedmatlab.com/blog/javacomponent

ここに私のコードがあります:

[jpanel1, hpanel1] = javacomponent('javax.swing.JPanel');
[jButton1, hButton1] = javacomponent('javax.swing.JButton');
[jscroll, hscroll] = javacomponent('javax.swing.JScrollPane');

jButton1.setText('Click again!'); 
set(hButton1,'position',[5 5 50 50])
set(hpanel1,'position',[50 50 500 500],'BackgroundColor','white');
jpanel1.add(jButton1);
jscroll.add(jpanel1);

パネルとボタンは作成されましたが、スクロールペインが見つかりません。jscroll を表示に設定しようとしましたが、結果はありませんでした。私は何を見逃していますか??

4

2 に答える 2

1

javacomponent最も外側のJavaコンテナを表示するために、つまりあなたの場合は一度だけ使用する必要がありJScrollPaneます。コンテナ内でコンポーネントを組み立ててJPanel、それをJScrollPaneコンストラクタに渡すだけです。

後続のメソッド呼び出しが EDT で実行されるように、 javaObjectEDTを使用してオブジェクトを作成する方が安全であることに注意してください。そうしないと、デッドロック/競合状態に直面する可能性があります

最後に、によって作成されたコンテナーに対してgetpixelpositionとunits を使用して、親描画領域全体を塗りつぶし、サイズ変更時の動作を改善する方法に注意してください。'normalized'javacomponentJScrollPane

jButton1 = javaObjectEDT('javax.swing.JButton', 'Button 1');
jButton2 = javaObjectEDT('javax.swing.JButton', 'Button 2');
jPanel = javax.swing.JPanel();
jPanel.add(jButton1);
jPanel.add(jButton2);
jScrollPane = javax.swing.JScrollPane(jPanel);

hFig = figure();
hParent = uicontainer('Parent',hFig);
parentPixelPos = getpixelposition(hParent);
pos = [1,1,parentPixelPos(3),parentPixelPos(4)]; % fill the parent uicontainer completely
[~, hContainer] = javacomponent(jScrollPane, pos, hParent);
set(hContainer, 'Units', 'normalized');  % better behavior on resizing
于 2016-05-13T21:39:16.657 に答える