我正在开发一个包含某些视图的RCP plugin project
。第一个视图
员工详细信息,如name
,address
等。有一个选项可以使用浏览按钮上传员工图像。第二个视图显示在第一个视图中输入的详细信息。除照片外的所有详细信息显示正常。
在照片标签处显示红色方块。我设置照片的代码如下所示:
Label photoLabel = new Label(parent, SWT.NONE);
photoLabel.setBounds(420, 233, 100, 106);
photoLabel.setImage(SWTResourceManager.getImage(FormDataViewClass.class,photoUploadPath));
其中photoUploadPath
是包含上传照片路径的字符串变量。
我该如何解决这个问题?
答案 0 :(得分:1)
以下代码段帮助我解决了上述问题。
byte[] uploadedImg = null;
try {
File f1 = new File(photoUploadPath);
double fileLen = f1.length();
uploadedImg = new byte[(int) fileLen];
FileInputStream inputStream = new FileInputStream(photoUploadPath);
int nRead = 0;
while ((nRead = inputStream.read(uploadedImg)) != -1) {
System.out.println("!!!!!!!!!!!!!!!!!" + new String(uploadedImg));
}
inputStream.close();
} catch (Exception e2) {
// TODO: handle exception
}
BufferedInputStream inputStreamReader = new BufferedInputStream(new ByteArrayInputStream(uploadedImg));
ImageData imageData = new ImageData(inputStreamReader);
Image image = new Image(Display.getCurrent(), imageData);
photoLabel.setImage(image);
答案 1 :(得分:0)
如果它是RCP应用程序,我会使用可扩展的解决方案。
创建一个ImageCache
对象,您可以在应用程序生命周期的开头实例化(最好在应用程序的Activator
类中)。
这个ImageCache
可以从相对于插件的路径获取图像(当然也可以缓存它们)(例如插件有一个文件夹icons
;然后,当你需要一个图标时,你只需要调用Activator.getDefault().getImage("icons/random.png");
- 其中getDefault()
是Activator
单例实例。
在ImageCache
中有两个:
public ImageDescriptor getImageDescriptor(final String path)
{
ImageDescriptor imgD = AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path);
if (imgD == null)
{
return null; // OR a "missing icon", e.g. a red flag
}
}
和
public Image getImage(final String path)
{
Image image = imageCacheMap.get(path);
if (image == null)
{
image = getImageDescripto(path).createImage();
imageCacheMap.put(path, image);
}
return image;
}
由于需要处理这些图片,因此dispose()
中的方法ImageCache
会在stop()
的{{1}}方法中调用。
有很多方法可以解决这个问题。在我看来,这是RCP应用程序中最好的一个。
答案 2 :(得分:0)
Java SWT加载并调整图像以动态查看或编辑
单击按钮打开FileDialog Box并选择要在特定标签上显示的任何图像。
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"));