2017-02-02 5 views
6

ボタンファイルダイアログボックスを開き、特定のラベルに表示する画像を選択します。rcpとswt/jfaceコンポーネントを使用して、ボタンでクリックしてラベル内に画像を動的に追加する方法

ラベルコントロール では、選択したイメージを使用して絶対パスまたは相対パスを設定しようとしましたが、動的に正しく動作しません。

ですので、私の質問にお答えください。

+0

あなたが今までに試したことと、正確にどこにいるのかを示してください。 –

+0

@RüdigerHerrmann私はこの解決策を見つけました...事前に感謝 –

答えて

3

のJava SWTロードとボタンのFileDialogボックスを開くためにクリックして、特定のラベルに表示する任意の画像を選択し

![enter image description here


動的

で を表示するには画像やエディタのサイズを変更します。

ImageLoaderクラスから画像を読み込むと、ファイルまたはストリーム

ImageDataをクラスを画像を保存するために使用されている画像

SWTの画像クラスのデバイスに依存しない記述GUIで画像を表示するのに使用できます。

package rcp_demo.Editor; 

import org.eclipse.swt.widgets.FileDialog; 
import org.eclipse.swt.custom.CLabel; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.graphics.ImageData; 
import org.eclipse.swt.graphics.ImageLoader; 


public class ProductEditor extends EditorPart { 

     public static final String ID="rcp_demo.Editor.product"; 
     private Text text; 
     private CLabel lbl_image_text; 

     private static final String[] FILTER_NAMES = { 
     "Images(*.jpg)","Images(*.jpeg)","Images(*.png)","All Files (*.*)"}; 

     // These filter extensions are used to filter which files are displayed. 
     private static final String[] FILTER_EXTS = { "*.jpg", "*.jpeg", "*.png", "*.*"}; 

    public void createPartControl(final Composite parent) { 

     parent.setLayout(null); 
     //Layout with absolute positioning components. 

     text = new Text(parent, SWT.BORDER); 
     text.setBounds(25, 57, 169, 19); 

     Button btnOpen = new Button(parent, SWT.NONE); 
     btnOpen.setText("open"); 
     btnOpen.addSelectionListener(new SelectionAdapter() { 
      @Override 
     public void widgetSelected(SelectionEvent e) { 

      FileDialog dialog = new FileDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.OPEN); 
      dialog.setFilterNames(FILTER_NAMES); 
      dialog.setFilterExtensions(FILTER_EXTS); 
      String result = dialog.open(); 
      if(result!=null) 
       { 
        text.setText(result); 
        Image image=SWTResourceManager.getImage(result); 
        ImageData imgData = image.getImageData(); 
        imgData=imgData.scaledTo(200, 200); 

        ImageLoader imageLoader = new ImageLoader(); 
        imageLoader.data = new ImageData[] {imgData}; 
        imageLoader.save(result, SWT.IMAGE_COPY); 

        System.out.println(imgData.width+"....."+imgData.height); 
        lbl_image_text.setBounds(25,88,imgData.width+10,imgData.height+10); 
        //Image size set to Label 
        //lbl_image_text.setBounds(25,88,image.getBounds().width+10,image.getBounds().height+10); 
        lbl_image_text.setImage(SWTResourceManager.getImage(result)); 
       } 
     } 
    }); 
    btnOpen.setText("open"); 
    lbl_image_text = new CLabel(parent, SWT.Resize); 
    } 
} 

CLabelクラスは、Labelクラスよりも高度な機能を提供します。 このクラスは、テキストラベルとイメージラベルを同時に表示できます。

lbl_image_text.setText("Welcome"); 
    lbl_image_text.setImage(SWTResourceManager.getImage("Image Path")); 
+1

['Layout's](http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/ index.html)。絶対的なポジショニング/サイジングは、最終的にあなたを困らせてしまいます。 – Baz

+0

@Baz絶対配置コンポーネントを使用したレイアウト..設定レイアウトデザイン時間(EditorPartを拡張)..ありがとう –

関連する問題