Video Swing JPanel dentro da vista SWT
Pergunta
Estou construindo um aplicativo RCP Eclipse. Quero incorporar um feed de vídeo em uma das visualizações. Estou usando a estrutura de mídia Java para criar o feed de vídeo. Sim, meu trabalho exige que eu seja masoquista.
Quando eu executo meu código de vídeo como um aplicativo de balanço independente, o painel de feed de vídeo (um balanço JPanel
) Exibe no tamanho correto de 320 x 240 pixels. Quando executo o mesmo código no meu Eclipse RCP usando a classe swt_awt, o painel de feed de vídeo é reduzido para 80 x 60.
eu tentei setPreferredSize
e setMinimumSize
no painel de feed de vídeo swing. Nada muda.
eu tentei setBounds
e setSize
no composto SWT. Nada muda.
Alguém incorporou um feed de vídeo swing em uma visualização SWT?
Alguém incorporou um componente de giro em uma exibição SWT e especificou o tamanho do componente de balanço?
Solução
Finalmente descobri como eu poderia "enganar" o SWT para produzir um feed de vídeo de um tamanho mais razoável.
Eu exibi uma imagem JPG do tamanho correto e, em seguida, sobrepusei a imagem com o código AWT/Swing.
Aqui está o código que usei:
Composite videoComposite = new Composite(panel,
SWT.EMBEDDED | SWT.BORDER | SWT.NO_BACKGROUND);
videoComposite.setLayout(new FillLayout());
videoComposite.setLayoutData(new GridData(
SWT.CENTER, SWT.CENTER, true, true, 1, 1));
CLabel videoImage = new CLabel(videoComposite, SWT.SHADOW_IN);
videoImage.setImage(dummyVideo);
final Frame frame = SWT_AWT.new_Frame(videoComposite);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JApplet applet = new JApplet();
applet.setFocusCycleRoot(false);
applet.add(rabidPhoto.getVideoPanel(false));
frame.add(applet);
frame.pack();
frame.setVisible(true);
}
});
Primeiro, eu defini o composto SWT.
Em seguida, defini um clabel SWT para preencher o composto. Eu usei um clabel porque uso clabels durante o restante da visualização do SWT. dummyVideo
é um JPG que eu criei. O JPG é de 240 x 180 pixels.
Em seguida, eu defini o quadro AWT e o preenchi com o painel de vídeo swing. Definir um Japplet primeiro é uma dica que eu peguei no site Eclipse.
Usar o JPG é como usar números mágicos no código do programa, em vez de defini -los como campos. Mas pelo menos o truque JPG funcionou.