2011-01-05 10 views
1

Ich baue eine Eclipse RCP-Anwendung. Ich möchte einen Video-Feed in eine der Ansichten einbetten. Ich verwende das Java Media Framework, um den Video-Feed zu erstellen. Ja, meine Arbeit verlangt, dass ich Masochist bin.Video Swing JPanel Innerhalb von SWT View

Wenn ich meinen Videocode als eigenständige Swing-Anwendung ausführe, wird das Videoeinzugsfenster (ein Swing JPanel) mit der korrekten Größe von 320 x 240 Pixel angezeigt. Wenn ich den gleichen Code in meinem Eclipse RCP mit der SWT_AWT Klasse ausführen, wird die Video-Feed Tafel 80 x reduziert 60.

I setPreferredSize und setMinimumSize auf der Schaukel-Video-Feed-Panel versucht haben. Nichts verändert sich.

Ich habe setBounds und auf dem SWT-Verbund versucht. Nichts verändert sich.

Hat jemand in einer SWT-Ansicht einen Swing-Videofeed eingebettet?

Hat jemand eine Swing-Komponente in eine SWT-Ansicht eingebettet und die Größe der Swing-Komponente angegeben?

Antwort

0

Endlich habe ich herausgefunden, wie ich SWT dazu bringen kann, einen Video-Feed von vernünftiger Größe zu produzieren.

Ich zeigte ein JPG-Bild der richtigen Größe an und überlagerte das Bild dann mit dem AWT/Swing-Code.

Hier ist der Code, den ich verwendet:

 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); 
      } 
     }); 

Zuerst habe ich die SWT Composite-definiert.

Als nächstes habe ich ein SWT CLabel definiert, um den Composite zu füllen. Ich habe ein CLabel benutzt, weil ich CLabels für den Rest der SWT-Ansicht verwende. dummyVideo ist ein JPG, das ich erstellt habe. Das JPG ist 240 x 180 Pixel.

Dann habe ich den AWT-Rahmen definiert und mit der Swing-Videoanzeige ausgefüllt. Das Definieren eines JApplets ist ein Tipp, den ich von der Eclipse-Website genommen habe.

Die Verwendung des JPG ist wie die Verwendung von magischen Zahlen im Programmcode, anstatt sie als Felder zu definieren. Aber zumindest der JPG-Trick hat funktioniert.