`
huzhenyu
  • 浏览: 188214 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

SWT中创建一个可以可拖曳的图片且实现滚动条跟随

阅读更多
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.swt.snippets;

/*
* Composite example snippet: scroll a child control automatically
*
* For a list of all SWT example snippets see
* http://www.eclipse.org/swt/snippets/
*/
import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;

public class Snippet9 {

public static void main (String [] args) {
Display display = new Display ();
final Shell shell = new Shell (display, SWT.SHELL_TRIM | SWT.H_SCROLL | SWT.V_SCROLL);
final Composite composite = new Composite (shell, SWT.BORDER);
composite.setEnabled (false);
composite.setLayout (new FillLayout ());
composite.setSize (700, 600);
final Color red = display.getSystemColor (SWT.COLOR_RED);
composite.addPaintListener (new PaintListener() {
public void paintControl (PaintEvent e) {
e.gc.setBackground (red);
e.gc.fillOval (5, 5, 690, 590);
}
});
final ScrollBar hBar = shell.getHorizontalBar ();
hBar.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event e) {
Point location = composite.getLocation ();
location.x = -hBar.getSelection ();
composite.setLocation (location);
}
});
final ScrollBar vBar = shell.getVerticalBar ();
vBar.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event e) {
Point location = composite.getLocation ();
location.y = -vBar.getSelection ();
composite.setLocation (location);
}
});
shell.addListener (SWT.Resize,  new Listener () {
public void handleEvent (Event e) {
Point size = composite.getSize ();
Rectangle rect = shell.getClientArea ();
hBar.setMaximum (size.x);
vBar.setMaximum (size.y);
hBar.setThumb (Math.min (size.x, rect.width));
vBar.setThumb (Math.min (size.y, rect.height));
int hPage = size.x - rect.width;
int vPage = size.y - rect.height;
int hSelection = hBar.getSelection ();
int vSelection = vBar.getSelection ();
Point location = composite.getLocation ();
if (hSelection >= hPage) {
if (hPage <= 0) hSelection = 0;
location.x = -hSelection;
}
if (vSelection >= vPage) {
if (vPage <= 0) vSelection = 0;
location.y = -vSelection;
}
composite.setLocation (location);
}
});
final Point [] offset = new Point [1];
Listener listener = new Listener () {
public void handleEvent (Event event) {
switch (event.type) {
case SWT.MouseDown:
Rectangle rect = composite.getBounds ();
if (rect.contains (event.x, event.y)) {
Point pt1 = composite.toDisplay (0, 0);
Point pt2 = shell.toDisplay (event.x, event.y);
offset [0] = new Point (pt2.x - pt1.x, pt2.y - pt1.y);
}
break;
case SWT.MouseMove:
if (offset [0] != null) {
Point pt = offset [0];
composite.setLocation (event.x - pt.x, event.y - pt.y);
System.out.println("x : " + event.x + " y : " + event.y);
hBar.setSelection(pt.x - event.x);
vBar.setSelection(pt.y - event.y);
}
break;
case SWT.MouseUp:
offset [0] = null;
break;
}
}
};
shell.addListener (SWT.MouseDown, listener);
shell.addListener (SWT.MouseUp, listener);
shell.addListener (SWT.MouseMove, listener);
shell.setSize(600, 500);
shell.open ();
while (!shell.isDisposed()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}

}
分享到:
评论

相关推荐

    在SWT中显示jfreeChart图形,且解决滚动条问题

    Jfreechart提供的SWT接口,并不支持滚动条,本资源实现了这个方法

    图表滚动条

    1. **创建SWT Composite**:在SWT的Shell(顶级窗口)中创建一个Composite,作为图表的容器。 2. **创建JFreeChart**:根据数据创建JFreeChart对象,定义所需的图表类型和数据源。 3. **创建ChartComposite**:将...

    swt-demo.zip

    这个名为"swt-demo.zip"的压缩包包含了一个基于SWT实现的图片列表预览应用,它展示了如何利用SWT库来创建功能丰富的图像浏览界面。以下是关于SWT和这个特定示例应用的一些详细知识点: 1. SWT简介:SWT是Sun ...

    swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位

    SWT(Standard Widget Toolkit)是Java编程环境中一个用于创建图形用户界面(GUI)的开源库,它是Eclipse项目的一部分。标题“swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位”表明这个压缩包包含了适用于...

    swt table 实现换行

    根据提供的文件信息,可以看出本文主要讨论的是如何在 SWT (Standard Widget Toolkit) 的 Table 控件中实现文本换行的功能。SWT 是一个用于开发基于 Java 的桌面应用程序的工具包,它提供了丰富的用户界面组件来帮助...

    SWT TreeViewer实例

    - 在Shell中创建一个Tree控件,这是TreeViewer显示的载体。 - 实例化TreeViewer对象,并将其与创建的Tree控件关联。 ```java Tree tree = new Tree(shell, SWT.BORDER); TreeViewer treeViewer = new TreeViewer...

    swt创建tree的例子

    下面将详细介绍如何在SWT中创建一个Tree实例,并探讨相关的知识点。 1. **导入必要的库** 在Java项目中使用SWT,首先需要引入SWT库。如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml ...

    ScrolledComposite自动出现滚动条

    ScrolledComposite自动出现最适合大小的滚动条代码

    SWT创建Shell窗口

    SWT(Standard Widget Toolkit)是Java编程环境中用于创建图形用户界面(GUI)的一种库,它提供了与操作系统原生UI组件紧密集成的能力。本篇将详细讲解如何使用SWT来创建一个基本的Shell窗口。 首先,我们需要理解...

    SWT视频播放器

    在SWT中,可以使用FileDialog类来实现这一功能。 6. **多线程处理**:为了保证界面的响应性,视频播放通常在后台线程进行,防止阻塞主线程。 7. **音频同步**:视频播放器还需要处理音频和视频的同步问题,确保...

    使Excel嵌入到SWT窗口中

    在本例中,我们使用SWT来创建一个窗口,并将Excel嵌入到该窗口中。SWT的使用可以大大简化GUI的开发和实现。 知识点三:OLE技术的使用 OLE(Object Linking and Embedding)是一种允许不同的应用程序之间交互和共享...

    SWT Table单元格编辑功能

    在Java图形用户界面(GUI)开发中,SWT(Standard Widget Toolkit)是一个广泛使用的工具包,它提供了丰富的控件集合,用于构建高性能的桌面应用程序。其中,`Table`控件是SWT中最常用的数据展示组件之一,尤其适用...

    JAVA实现滚动字

    在Java编程语言中,"滚动字"通常是指一种文本动画效果,其中文字会从一端移动到另一端,类似于电视屏幕底部的新闻滚动条。这种效果可以用于各种应用程序,如游戏、用户界面或者简单的演示。以下是一些关于如何在Java...

    SWT自定义圆形按钮

    SWT原生按钮不够美观,本案例实现自定义圆形按钮,代码可直接下载使用。

    Eclipse中使用SWT进行界面设计

    在Eclipse中使用SWT进行界面设计涉及到一系列关键概念和技术,包括SWT的起源与优势、SWT应用程序的组成以及开发环境的配置。 1. 为什么要使用SWT? SWT,全称Standard Widget Toolkit,是由IBM开发的一个跨平台的...

    基于Swt/Jface图片工厂实现

    手写基于Swt/Jface图片工厂实现图片传输界面更新。应用于项目中的工具类,供大家学习参考。提供一种新的学习思路。

    SWT中文教程.rar

    SWT(Standard Widget Toolkit)是Java编程环境中一个用于创建图形用户界面(GUI)的开源库,它是Eclipse项目的一部分。本教程将深入讲解SWT的基本概念、组件使用以及实际开发中的应用技巧。以下是对SWT中文教程的...

    在SWING、SWT中嵌入浏览器

    这篇博客文章“在SWING、SWT中嵌入浏览器”就探讨了如何在Java应用中实现这一功能。 首先,SWING是Java Foundation Classes (JFC)的一部分,提供了丰富的组件和布局管理器来构建复杂的用户界面。尽管SWING本身并不...

    SWT - JavaQQ创建登录框

    通过本实验的学习,我们不仅掌握了如何使用SWT库在Java中创建一个登录框界面的基础知识,还学会了如何在Eclipse中创建SWT项目、设置窗体属性以及添加控件等关键技能。这对于今后开发基于Java的GUI应用程序具有重要的...

    swt背景拖动不将图片拖出窗口

    在SWT(Standard Widget Toolkit)中...通过这样的实现方式,我们可以在SWT应用中创建一个可以随窗口拖动的背景图片,并保证图片不会被拖出窗口之外。这种效果通常在制作自定义桌面壁纸或者某些特定的UI设计中很有用。

Global site tag (gtag.js) - Google Analytics