私はSwingバージョンから移行中のRCPアプリケーションで作業しています。だから私たちは、この移行中にSwingの世界に住む必要がある多くのUIコンポーネントを持っています。私は、既存のSwingコンポーネントをAWT-SWTブリッジフレームに適切に配置することができます。ブリッジの内容が変更されたときにAWT-SWTブリッジを含むEclipse RCP部分をリフレッシュする
これらのSwingコンポーネントをJScrollableペインにラップしてからブリッジに追加したので、Swing UIエレメントのサイズが変更されたときに収容部品のサイズを変更する必要はありません。
@PostConstruct
public void postConstruct(final Composite parent) {
/* Create embedding composite */
final Frame bridgeFrame;
final Composite embed;
embed = new Composite(parent, SWT.EMBEDDED);
embed.setLayout(new FillLayout());
bridgeFrame = SWT_AWT.new_Frame(embed);
bridgeFrame.setLayout(new BorderLayout());
bridgeFrame.add(
new JScrollPane(getTestPanel()),
BorderLayout.CENTER);
}
私のSwingコンポーネントは、ユーザーがボタンをクリックすると、コンポーネントの中に隠されたものは目に見える、または新しい作られ振る舞いを持っている:私は一部の古いSwingコンポーネントを配置するコードは次のようになりますUI要素がSwingコンポーネントに追加されます。たとえば、
private JPanel getTestPanel() {
final JPanel output;
final JButton eastBttn, westBttn;
output = new JPanel();
eastBttn = new JButton("East Button");
westBttn = new JButton("West Button");
output.setLayout(new BorderLayout());
output.add(eastBttn, BorderLayout.EAST);
output.add(westBttn, BorderLayout.WEST);
eastBttn.addActionListener(evt -> {
System.out.println("East Button Clicked");
output.add(new JLabel("East Button Clicked"), BorderLayout.CENTER);
});
return output;
}
スイングコンポーネントの要素が変更されると、親ブリッジフレームが正しくレンダリングされないという問題があります。
部品が最初に作成されている場合は、私のアプリケーションは、次のようになります。私はそのブリッジフレームの中央にテキストラベルを追加することになっていますEastButton
をクリックした後
。ただし、はアプリケーションビューで何も変更されません。私も少しの部分は、サッシ含むサイズを変更し始め
しかし、正しくブリッジフレームの更新を含む部分:私はブリッジフレーム更新収容部を作るために何ができるか
自動的に更新しますか?
が、これはブリッジフレームに再描画の問題だったかどうかをテストするために、私はブリッジフレームのrepaint
/revalidate
/pack
をトリガーするメニュー項目を持っていたが、それは問題を解決していませんでした。私はそれが収容部のレンダリングと何か関係があると考えていますが、それに対処する方法は分かりません。
私はブリッジを使用していないので、推測して 'embed.layout(true、true) 'を試してください。 –
@ greg-449ありがとう!残念ながら、これはうまく動作しませんでした(あるいは、 'layout'、' redraw'などの変形です)。 – anishthecoder