2017-02-02 9 views
6

버튼 파일 대화 상자을 열고 특정 라벨에 표시 할 이미지를 선택하십시오.rcp 및 swt/jface 구성 요소를 사용하여 버튼으로 라벨에 동적 이미지를 추가하는 방법

레이블 컨트롤 에서 선택한 이미지를 사용하여 절대 경로 또는 상대 경로를 설정하려고하지만 동적으로 올바르게 작동하지 않습니다.

제 질문에 도움주세요. 해결하십시오.

+0

지금까지 시도한 것과 정확히 어디에 붙어 있는지 표시하십시오. –

+0

@ Rüdiger Herrmann 나는이 해결책을 찾는다. 사전에 감사한다 –

답변

3

자바 SWT로드 및 버튼

동적

![enter image description here


에서 보거나 편집 할 이미지의 크기를 조정은의 FileDialog 상자를 열려면 클릭하고 특정 레이블에 표시 할 모든 이미지를 선택했습니다.

하여 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 확장) .. thanks –