我的CTabFolder是这种样式SWT.CLOSE|SWT.BORDER|SWT.V_SCROLL,当我关闭了其中的所有CTabItem之后显示是一片空白,但是我想显示的是一幅背景图片,该怎么添加呢?
解决方案 »
- IO流中如果不调用f.close(),直接将f=null,那么f所引用的流对象会被回收吗?
- 大数据量arraylist与ehcache缓存的问题
- 关于正则表达式 部分替换
- eclipse 出现问题
- 关于JTable 中放入 JCheckBox, 并且设置其编辑属性的问题?在线等待
- 使用WIN CVS时遇到的问题,请帮忙。。。。
- JBuilder7+weblogic7是不是就只需这两个软件就可以部署EJB,需要Borland Enterprise Server吗?
- 200分大奉送!有关SQL语句的问题?急!在先等待!谁的好再送上100!请给原代码!
- double支持多少位的,为什么运算出错呢?该如何解决呢
- (新手)这里怎么看到300篇以外的所有文章?(不是搜索)
- 面向接口编程的好处和优点
- netbeans-6.0.1安装问题
楼主【josemourinho】截止到2008-06-26 17:49:34的历史汇总数据(不包括此帖):
发帖数:15 发帖分:520
结贴数:9 结贴分:360
未结数:6 未结分:160
结贴率:60.00 % 结分率:69.23 %
楼主加油
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Composite;/**
* 可设置背景图片的Composite
* Composite本身是可以设置背景图片的,但是只提供了平铺的显示方式,该类实现了居中、平铺和拉伸三种显示方式。
*
* @author 003
*/
public class ImageComposite extends Composite
{
/**
* 居中
*/
public static final String CENTRE = "Centre";
/**
* 平铺
*/
public static final String TILED = "Tiled"; /**
* 拉伸
*/
public static final String SCALED = "Scaled"; /**
* 背景图片
*/
private Image backgroundImage;
/**
* 背景图片显示模式
*/
private String imageDisplayMode; /**
* 背景图片显示模式索引(引入此属性有助于必要时扩展)
*/
private int modeIndex; /**
* 构造一个没有背景图片的ImageComposite
* @param parent 父组件
* @param style 风格
*/
public ImageComposite(Composite parent, int style)
{
this(parent, style, null, CENTRE);
}
/**
* 构造一个具有指定背景图片和指定显示模式的ImageComposite
* @param parent 父组件
* @param style 风格
* @param image 背景图片
* @param modeName 背景图片显示模式
*/
public ImageComposite(Composite parent, int style, Image image, String modeName)
{
super(parent, style);
addPaintListener(new PaintListener()
{
@Override
public void paintControl(PaintEvent e)
{
drawImage(e);
}
});
setBackgroundImage(image);
setImageDisplayMode(modeName);
} /**
* 获取背景图片
* @return 背景图片
* @see org.eclipse.swt.widgets.Control#getBackgroundImage(Image)
*/
@Override
public Image getBackgroundImage()
{
return backgroundImage;
} /**
* 设置背景图片
* @param 背景图片
* @see org.eclipse.swt.widgets.Control#setBackgroundImage(Image)
*/
@Override
public void setBackgroundImage(Image backgroundImage)
{
this.backgroundImage = backgroundImage;
this.redraw();
} /**
* 获取背景图片显示模式
* @return 显示模式
*/
public String getImageDisplayMode()
{
return imageDisplayMode;
} /**
* 设置背景图片显示模式
* @param modeName 模式名称,取值仅限于ImagePane.TILED ImagePane.SCALED ImagePane.CENTRE
*/
public void setImageDisplayMode(String modeName)
{
if(modeName != null)
{
modeName = modeName.trim();
//居中
if(modeName.equalsIgnoreCase(CENTRE))
{
this.imageDisplayMode = CENTRE;
modeIndex = 0;
}
//平铺
else if(modeName.equalsIgnoreCase(TILED))
{
this.imageDisplayMode = TILED;
modeIndex = 1;
}
//拉伸
else if(modeName.equalsIgnoreCase(SCALED))
{
this.imageDisplayMode = SCALED;
modeIndex = 2;
}
this.redraw();
}
}
/**
* 绘制背景
* @param e PaintEvent
*/
private void drawImage(PaintEvent e)
{
//如果设置了背景图片则显示
if(backgroundImage != null)
{
int width = this.getSize().x;
int height = this.getSize().y;
int imageWidth = backgroundImage.getImageData().width;
int imageHeight = backgroundImage.getImageData().height;
switch(modeIndex)
{
//居中
case 0:
{
int x = (width - imageWidth) / 2;
int y = (height - imageHeight) / 2;
e.gc.drawImage(backgroundImage, x, y);
break;
}
//平铺
case 1:
{
for(int ix = 0; ix < width; ix += imageWidth)
{
for(int iy = 0; iy < height; iy += imageHeight)
{
e.gc.drawImage(backgroundImage, ix, iy);
}
}
break;
}
//拉伸
case 2:
{
ImageData data = backgroundImage.getImageData().scaledTo(width, height);
e.gc.drawImage(new Image(e.display, data), 0, 0);
break;
}
}
}
}
}
可能是你没关完,我刚才测试了,全部关完的时候getItemCount()返回0