3
我在一個按鈕中顯示圖像,並且當單擊該按鈕時,它會打開一個組合,允許我選擇另一張圖片用於該按鈕。保存操作後,下面的代碼調整圖片大小並將其保存到目錄中。然後它加載重新加載組合。當組合加載按鈕時,該按鈕會根據用戶正在查看的記錄的ID從默認位置拉取圖像。我遇到的問題是,除非關閉並重新加載應用程序,否則按鈕上的圖像保持不變。需要注意的一件有趣事情是,當加載默認按鈕圖像時(即,沒有爲其ID保存圖片),按鈕圖像會根據需要進行更改,但僅限於第一次。 希望我已經清楚描述了我的問題,如果你需要我澄清請評論。Java SWT按鈕圖像不刷新
---代號爲保存按鈕 -
Button btnSave = new Button(this, SWT.NONE);
btnSave.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String path = txtPhotoPath.getText();
if (CC_Files.fileExists(path)) {
ArrayList<String> picTypes = new ArrayList<String>();
picTypes.add(".jpg");
picTypes.add(".png");
picTypes.add(".gif");
int t = 0;
for(int i = 0; i < picTypes.size(); i++){
String s = picTypes.get(i);
if(path.contains(s.toUpperCase())){
t++;
}
if(path.contains(s.toLowerCase())){
t++;
}
}
if (t > 0) {
Image image = (Image) SWTResourceManager.getImage(path);
ImageData imgData = image.getImageData();
int intH = image.getBounds().height;
int intW = image.getBounds().width;
int h = (150 * intH)/intW;
int w = 150;
if (h > 150){
h = 150;
w = (150 * intW)/intH;
}
imgData = imgData.scaledTo(w, h);
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] { imgData };
imageLoader.save(Variables.getStrResources()
+ "Pics\\" + a.getHerd_id() + ".jpg",
SWT.IMAGE_JPEG);
try {
Frm_Animal.setAnimalEditSC(Frm_Animal
.createAnimalComp(a));
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
GridData gd_btnSave = new GridData(SWT.LEFT, SWT.CENTER, false, false,
1, 1);
gd_btnSave.widthHint = 60;
btnSave.setLayoutData(gd_btnSave);
btnSave.setText("Save");
創建按鈕在複合
--- ---代碼
Button btnPic = new Button(composite, SWT.CENTER);
btnPic.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
try {
Comp_Add_Photo photo = new Comp_Add_Photo(
scrolledComposite, SWT.FILL, a);
setAnimalEditSC(photo);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
Image image = null;
String strPic = Variables.getStrResources() + "Pics\\" + a.getHerd_id() +".jpg";
if(CC_Files.fileExists(strPic)){
image = (Image) SWTResourceManager
.getImage(strPic);
}else {
image = (Image) SWTResourceManager
.getImage(Variables.getStrResources() + "black_cow.png");
}
btnPic.setImage(image);
btnPic.setToolTipText("Click Here To Add Photo");
GridData gd_btnPic = new GridData(SWT.CENTER, SWT.CENTER, false, false,
1, 7);
gd_btnPic.heightHint = 160;
gd_btnPic.widthHint = 160;
btnPic.setLayoutData(gd_btnPic);
良好的通話! [這裏](http://dev.eclipse.org/svnroot/tools/org.eclipse.windowbuilder/trunk/org.eclipse.wb.rcp/resources/1.5/org/eclipse/wb/swt/SWTResourceManager.java)是'SWTResourceManager'的來源。它是WindowBuilder的一部分。然而,沒有辦法清除單個圖像的緩存輸入。然而,因爲這個類是在項目中創建的,所以用手實現這樣的方法真的很容易... – Baz
2問題A:我可以做一個SWTResourceManager的實例,然後配置它清除它的緩存? B:如果不是,我會怎樣去手工製作緩存清除方法?謝謝 – Talon06
我得到了我加了SWTResourceManager.dispose(); image =(Image)SWTResourceManager.getImage(strPic);這將清除SWTResourceManager緩存。感謝您指點我正確的方向。 – Talon06