SWT应用之:随机RGB颜色、ScrolledComposite控件的使用

SWT组件】内容滚动组件 ScrolledComposite 记录并总结了 `ScrolledComposite` 组件的使用方法 阅读详情

在项目中要用到SWT中我不熟悉的随机产生RGB颜色和ScrolledComosite的应用。因此,我学着做了一个包含这两个技巧的用法的DEMO分享出来。


A. SWT中产生随机RGB颜色的方法,由于RGB颜色是由红、绿、蓝三种颜色组成的,因此在产生的时候只需要随机产生这三种颜色的值就可以了。

(1)在SWT中提供了一个Color类,它的构造函数为 new Color(Display.getDefault(),new RGB());

(2)其中RGB对象的构造函数为 new RGB(int red,int green,int blue);

(3)因此,只需要随机产生RGB构造函数中的三个颜色值,就能生成随机的Color对象了

(4)产生随机数就很简单了,使用Random类提供的nextInt(int i)方法就能够产生随机的一定范围的int随机数了。


class ProduceColor {  
    public Color produceColor() {  
        Random random = new Random();  
        int red = random.nextInt(255);  
        int green = random.nextInt(255);  
        int blue = random.nextInt(255);  
        System.out.println("(" + red + "," + green + "," + blue + ")");  
        RGB rgb = new RGB(red, green, blue);  
        Color color = new Color(Display.getDefault(), rgb);  
        return color;  
    }  
}  

B,介绍ScrolledComosite控件的时候,由于这个Composite控件虽然提供了ScrooledBar,但是需要手动添加相应的响应事件处理,才能实现像Tree和Table那样的ScrolledBar的功能。因此,ScrolledComosite控件能够实现这个功能,但是麻烦程度和手动添加事件处理彻滑功能不相上下。

在这里就介绍ScrolledComosite控件的实现,以后接触到了手动添加彻滑事件的处理,再分享出来。

具体怎样实现,就不细谈了,直接贴出代码。


package testEntity;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Random;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.layout.grouplayout.GroupLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.grouplayout.LayoutStyle;

public class SWTColorDemo {

	protected Shell shell;
	private Group group;
	private Color color = null;
	private Composite composite_1;
	private Composite composite;
	private int count = 300;
	private ScrolledComposite scrolledComposite;

	/**
	 * Launch the application.
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			SWTColorDemo window = new SWTColorDemo();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shell = new Shell();
		shell.setSize(944, 664);
		shell.setText("SWT Application");
		shell.setLayout(new FillLayout(SWT.HORIZONTAL));
		{
			composite = new Composite(shell, SWT.BORDER);
			Button button = new Button(composite, SWT.NONE);
			button.setSize(200, 200);
			button.addSelectionListener(new SelectionAdapter() {
				@Override
				public void widgetSelected(SelectionEvent e) {
					color = (new ProduceColor()).produceColor();
				}
			});
			button.setText("改变字体颜色");
			{
				group = new Group(composite, SWT.NULL);
				group.setLayout(new FillLayout(SWT.HORIZONTAL));
				{
					final Canvas canvas = new Canvas(group, SWT.NONE);
					canvas.setBackground(new Color(Display.getDefault(), 200,
							200, 200));
					Button btnButton = new Button(composite, SWT.NONE);
					btnButton.addSelectionListener(new SelectionAdapter() {
						@Override
						public void widgetSelected(SelectionEvent e) {
							showSomething(500);
						}
					});
					btnButton.setText("500 BUTTON");
					GroupLayout gl_composite = new GroupLayout(composite);
					gl_composite.setHorizontalGroup(gl_composite
							.createParallelGroup(GroupLayout.LEADING).add(
									group, GroupLayout.DEFAULT_SIZE, 464,
									Short.MAX_VALUE).add(
									gl_composite.createSequentialGroup().add(
											122).add(button).add(28).add(
											btnButton).addContainerGap(158,
											Short.MAX_VALUE)));
					gl_composite.setVerticalGroup(gl_composite
							.createParallelGroup(GroupLayout.LEADING).add(
									gl_composite.createSequentialGroup().add(
											group, GroupLayout.DEFAULT_SIZE,
											529, Short.MAX_VALUE).add(41).add(
											gl_composite.createParallelGroup(
													GroupLayout.BASELINE).add(
													button).add(btnButton))
											.add(34)));
					composite.setLayout(gl_composite);
					canvas.addMouseListener(new MouseAdapter() {
						@Override
						public void mouseDown(MouseEvent e) {
							if (color != null) {
								GC gc = new GC(canvas);
								Rectangle rect = canvas.getClientArea();
								gc.fillRectangle(rect.x, rect.y, rect.width,
										rect.height);
								gc.setForeground(color);
								Font font = new Font(Display.getDefault(),
										"Arial", 32, SWT.BOLD);
								gc.setFont(font);
								gc.drawText("SHOW TEXT", e.x, e.y);
							}
						}
					});
				}
			}
		}
		showSomething(300);
	}

	public void showSomething(int count) {
		if (scrolledComposite == null) {
			scrolledComposite = new ScrolledComposite(shell, SWT.BORDER
					| SWT.H_SCROLL | SWT.V_SCROLL);
		}
		composite_1 = new Composite(scrolledComposite, SWT.NONE);
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 5;
		composite_1.setLayout(gridLayout);
		{
			for (int i = 0; i < count; i++) {
				Group group_1 = new Group(composite_1, SWT.NONE);
				Button button2 = new Button(group_1, SWT.NONE);
				Label label2 = new Label(group_1, SWT.NONE);
				group_1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER,
						true, true, 1, 1));
				{
					FileInputStream inputStream = null;
					try {
						inputStream = new FileInputStream(new File(
								".\\IMAGE\\a.jpg"));
						ImageData imageData = new ImageData(inputStream);
						button2.setImage(new Image(Display.getDefault(),
								imageData));
						inputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
					button2.addSelectionListener(new SelectionListener() {
						@Override
						public void widgetSelected(SelectionEvent e) {
							color = new ProduceColor().produceColor();
						}

						@Override
						public void widgetDefaultSelected(SelectionEvent e) {

						}
					});
				}
				{

					label2.setBounds(10, 40, 54, 12);
					label2.setText("Label" + i);
				}

				GroupLayout gl_group_1 = new GroupLayout(group_1);
				gl_group_1.setHorizontalGroup(gl_group_1.createParallelGroup(
						GroupLayout.LEADING).add(button2,
						GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE).add(
						GroupLayout.TRAILING,
						gl_group_1.createSequentialGroup().add(10).add(label2,
								GroupLayout.DEFAULT_SIZE, 101, Short.MAX_VALUE)
								.addContainerGap()));

				gl_group_1.setVerticalGroup(gl_group_1.createParallelGroup(
						GroupLayout.LEADING).add(
						GroupLayout.TRAILING,
						gl_group_1.createSequentialGroup().addContainerGap()
								.add(button2, GroupLayout.DEFAULT_SIZE, 84,
										Short.MAX_VALUE).addPreferredGap(
										LayoutStyle.UNRELATED).add(label2)
								.addContainerGap()));
				group_1.setLayout(gl_group_1);
			}
		}
		ScrollBar vscrollBar = scrolledComposite.getVerticalBar();
		vscrollBar.setIncrement(100);
		scrolledComposite.setContent(composite_1);
		scrolledComposite.setExpandHorizontal(true);
		scrolledComposite.setExpandVertical(true);
		scrolledComposite.setMinSize(composite_1.computeSize(SWT.DEFAULT,
				SWT.DEFAULT));
		scrolledComposite.setFocus();
	}
}

class ProduceColor {
	public Color produceColor() {
		Random random = new Random();
		int red = random.nextInt(255);
		int green = random.nextInt(255);
		int blue = random.nextInt(255);
		System.out.println("(" + red + "," + green + "," + blue + ")");
		RGB rgb = new RGB(red, green, blue);
		Color color = new Color(Display.getDefault(), rgb);
		return color;
	}
}



效果图:

初始显示的是300个Button




点击500 Button按钮后,显示了500个Button




点击“改变字体颜色”按钮,或者是点击右边的任何一个按钮,在灰色Canvas中点击显示的字体的颜色是随机显示的。



=========================  O V E R  ==================================

SWT/JFace实践:为Composite添加滚动条效果(ScrolledComposite使用心得      工作中一个任务是为一个已经有的Composite添加滚动条,原以为可以这样实现:    Composite scrollabledComposite = new Composite(parent, SWT.H_SCROLL | SWT.V_SCROLL);     再设置一下其它的参数就可以了,谁知这样是可以添加滚动条,但是滚动条里的Composite根本不会跟着动;于是,查API, 阅读详情

相关推荐

SWT中为Compsite显示滚动条效果

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Sty

HeruiUp的专栏 1万+

ScrolledComposite自动出现滚动条

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

Eclipse SWT与JFace图形界面编程精进

本文还有配套的精品资源,点击获取 简介:SWT和JFace是Eclipse平台中用于构建图形用户界面的重要组件。SWT提供了与操作系统交互的底层API,实现了高效的性能和原生界面外观,而JFace则建立在SWT之上,简化了GUI开发并引入了MVC设计模式。掌握这些工具将使开发者能够创建具有原生用户体验和复杂界面需求的应用程序,同时提高代码的可维护性和可扩展性。通过学习SWT...

weixin_42581846的博客 1714

SWT】 使 ScrolledComposite 中内容动态变化后依然可以滚动

引言: 在用户界面设计中,有时需要在有限的空间内显示大量内容。如果内容超过可视区域的大小,滚动功能可以帮助用户滚动并查看所有内容。本文将介绍如何使用 Eclipse SWT 库中的 ScrolledComposite 控件来实现在滚动区域中显示可滚动的标签。 问题描述: 假设有一个界面,其中包含一个按钮和一个滚动区域。当用户点击按钮时,希望在滚动区域中添加新的标签,并且如果标签的数量超过滚动区域的可视区域大小,用户可以通过滚动条来滚动查看所有的标签。

小子宝丁的博客 684

SWT ScrolledComposite解释

就像我的一个朋友曾经说过的那样,SWTScrolledComposite是令人讨厌的野兽。 在某种程度上,我同意。 这可能是为什么有太多关于如何使用此小部件的问题的原因。 但不仅是ScrolledComposite的作者受到了谴责。 当某个软件无法按您预期的方式工作时,则……您诅咒……并尝试一些不同的尝试……并以不同的方式诅咒……并向Google寻求帮助……并(希望)找到这个可爱的小文...

最佳 Java 编程 993

SWT】组件 ScrolledComposite 滚动内容充满所有滚动区

记录 ScrolledComposite 内容区填充的方法

小子宝丁的博客 604

SWT ScrolledComposite滚动面板设置

最近使用SWT中的滚动面板,按照相关书籍编写的代码并不能正常显示滚动条,经查询总结如下: 要显示的内容:shell下一个滚动面板,该面板中显示一个Group组。 1.首先在shell在建立一个容器Composite,在该容器中的布局为FillLayout Composite com = new Composite(shell,SWT.NONE); FillLayout gl_co

angel_xiaa的专栏 8975

SWT应用之:随机RGB颜色ScrolledComposite控件使用(二)————SWT Component(SWT组件)使用

本文与文章《 SWT应用之:随机RGB颜色ScrolledComposite控件使用 》实现相同的效果和功能,只是实现的方式不同。 文章《 SWT应用之:随机RGB颜色ScrolledComposite控件使用 》是采用直接实现的方式,就是所有的功能和组件都在同一个类中,这样不能达到组件重用,在其他类中使 用又要实现相同的功能。本文采用SWT 组件的功能,对ScrolledCompos

CaptainGan的专栏 2554

SWTScrolledComposite

importorg.eclipse.swt.SWT; importorg.eclipse.swt.custom.ScrolledComposite; importorg.eclipse.swt.graphics.Color; importorg.eclipse.swt.layout.FillLayout; importorg.eclipse.swt.layout.Gr...

数据可视化 347

Composite的滚动条这样用

   今天有个工作是给一个视图(view)上的Composite添加滚动条,原以为可以这样实现:     Composite scrolledComposite = new Composite(parent, SWT.H_SCROLL | SWT.V_SCROLL);   运行后一看,的确是有滚动条,但是滚动条里的Composite根本不会跟着动,一查才知道,swt中有一个专门负责这种效

梨木乔 5027

SWT 滚动条内容太长可能遇到的问题及解决方法

本文章针对新手,当然可能现在也没这么多人会看这部分内容了... 在window下,SWTScrolledComposite组件有一个缺陷,那就是内容不能超过32768像素,即短整形的长度。 对此的解决方法是不将拖动内容放在ScrolledComposite组件内部,而是在目标的下方或右方放置一个空的ScrolledComposite组件,根据目标的大小动态设置ScrolledComposit...

zmfCSDN的博客 1015

解决SWT Button设置背景颜色不可用的问题

在做Eclipse 的一个项目时遇到org.eclipse.swt.widgets.Button设置背景色,不起作用。遇到问题后在网上找了好久,重于找到一段修正代码,不可直接使用,于是将其更改为如下方法。本想重写swtButton类,结果任务在身,遇到问题就放弃了,又能力的可以试试。或许该方法还可以继续优化,大家继续啊。使用方法:正常使用SWT Button,只是在设置背景设以后,记得调用下面的方法,即可,测试通过。/*** * Just to fix button's backgroundColor,m

xuss1987的专栏 5638

SWT中怎么获得Color

转自http://jenkinv.blog.163.com/blog/static/3677252520075113194376/ swt中怎样得到Color?   Color color = Display.getCurrent().getSystemColor(SWT.COLOR_WHITE);//利用SWT已经定义好的颜色常量 or: Color color = ne

angel_xiaa的专栏 4238

SWT颜色获取

//三种颜色获取方式 final Color white = new Color(display, 255, 255, 255); final Color sysBlack = Display.getCurrent().getSystemColor(SWT.COLOR_BLACK); final Color swtBlue = SWTResourceManager.getColor(S

Wendy0719的博客 2518

SWT进阶版-颜色字体处理

package demotest; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Button; import org.ec.

cnds2016的博客 691
上一篇: SWT Canvas画图,实现CTRL + Z 回退前一步操作
下一篇: Oracle数据库定时备份导出
CaptainGan
博客等级 码龄18年 23粉丝 12原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值