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的中央绘制一行文字。

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

运行结果如下图:

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

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