SWT的PaintListener

简介: 以前很少用到这个类(org.eclipse.swt.events.PaintListener),利用它可以用来在control上画一些东西,基本方法是在control上 addPaintListener()一个PaintListener,然后在这个listener里做具体的画图工作,listener在control需要绘制的时候调用。

以前很少用到这个类(org.eclipse.swt.events.PaintListener),利用它可以用来在control上画一些东西,基本方法是在control上 addPaintListener()一个PaintListener,然后在这个listener里做具体的画图工作,listener在control需要绘制的时候调用。

下面例子代码用来在一个composite的中央绘制一行文字。

None.gif package  com.test; 
None.gif 
None.gif
import  org.eclipse.swt.SWT; 
None.gif
import  org.eclipse.swt.events.PaintEvent; 
None.gif
import  org.eclipse.swt.events.PaintListener; 
None.gif
import  org.eclipse.swt.graphics.GC; 
None.gif
import  org.eclipse.swt.graphics.Rectangle; 
None.gif
import  org.eclipse.swt.layout.FillLayout; 
None.gif
import  org.eclipse.swt.widgets.Button; 
None.gif
import  org.eclipse.swt.widgets.Composite; 
None.gif
import  org.eclipse.swt.widgets.Display; 
None.gif
import  org.eclipse.swt.widgets.Shell; 
None.gif 
ExpandedBlockStart.gif
public   class  Test3 
InBlock.gif 
ExpandedSubBlockStart.gif    
public static void main(String[] args) 
InBlock.gif        Display display 
= new Display(); 
InBlock.gif        Shell shell 
= new Shell(display); 
InBlock.gif        shell.setLayout(
new FillLayout()); 
InBlock.gif        
final Button button = new Button(shell, SWT.PUSH); 
InBlock.gif        button.setText(
"This is a button"); 
InBlock.gif        
final Composite comp2 = new Composite(shell, SWT.BORDER); 
ExpandedSubBlockStart.gif        comp2.addPaintListener(
new PaintListener() 
ExpandedSubBlockStart.gif            
public void paintControl(PaintEvent e) 
InBlock.gif                String text 
= "This is a composite"
InBlock.gif                Rectangle area 
= comp2.getClientArea();//client area 
InBlock.gif
                int tw = calcTextWidth(e.gc, text);//text width 
InBlock.gif
                int th = e.gc.getFontMetrics().getHeight();//text height 
InBlock.gif
                Rectangle textArea = new Rectangle(area.x + (area.width - tw) / 2
InBlock.gif                        area.y 
+ (area.height - th) / 2,  
InBlock.gif                        tw, 
InBlock.gif                        th);
//centerized text area 
InBlock.gif
                e.gc.drawString(text, textArea.x, textArea.y); 
InBlock.gif                e.gc.drawRectangle(textArea); 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif 
ExpandedSubBlockStart.gif            
private int calcTextWidth(GC gc, String text) 
InBlock.gif                
int stWidth = 0
ExpandedSubBlockStart.gif                
for (int i = 0; i < text.length(); i++
InBlock.gif                    
char c = text.charAt(i); 
InBlock.gif                    stWidth 
+= gc.getAdvanceWidth(c); 
ExpandedSubBlockEnd.gif                }
 
InBlock.gif                
return stWidth; 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
); 
InBlock.gif        shell.open(); 
ExpandedSubBlockStart.gif        
while (!shell.isDisposed()) 
InBlock.gif            
if (!display.readAndDispatch()) 
InBlock.gif                display.sleep(); 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        display.dispose(); 
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif

运行结果如下图:

paintlistener.gif

本文转自博客园八进制的博客,原文链接:SWT的PaintListener,如需转载请自行联系原博主。

相关文章
|
Java Android开发
【Eclipse】创建SWT项目
【Eclipse】创建SWT项目
166 0
|
Oracle 安全 Java
Java GUI框架选择什么?Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?
Java GUI框架选择什么?Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?
1389 0
|
Android开发
错误: 程序包org.eclipse.swt.graphics不存在/swt.jar下载方法
错误: 程序包org.eclipse.swt.graphics不存在/swt.jar下载方法
108 0
|
Android开发 Java 关系型数据库
安装JavaFX Scene Builder 到Eclipse
JavaFX Scene Builder是一种可视布局工具,允许用户快速设计JavaFX应用程序用户界面,而无需编码。用户可以将UI组件拖放到工作区,修改其属性,应用样式表,并且它们正在创建的布局的FXML代码将在后台自动生成。
2277 0
|
前端开发 Android开发
在SWT里显示AWT对象
今天遇到一个问题,就是要在一个Eclipse插件里显示JFreeChart的图形,因为后者是基于Java2D的,要把图形显示在SWT应用程序里需要利用SWT-AWT桥接器来实现,虽说桥接的方式多半会伴随着性能下降,但总归是一个解决方法。
1321 0
pi4j,Netbeans中togglebutton跟Jbutton的区别
一组togglebutton中会始终有一个是按下去的状态 一组commandbutton就全部都始终都是弹起的状态
1296 0