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

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

本文与文章《 SWT应用之:随机RGB颜色、ScrolledComposite控件的使用 》实现相同的效果和功能,只是实现的方式不同。

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

用又要实现相同的功能。本文采用SWT 组件的功能,对ScrolledComposite控件进行分离实现,使之成为一个公用组件,能够被其他类使用。

开始分步骤进行实现:

A:分离ScrolledComposite控件,新建一个类,继承ScrolledComposite控件类。实现ScrolledComposite类的构造方法。代码如下:

package com.swtcomponent;

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

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.grouplayout.GroupLayout;
import org.eclipse.swt.layout.grouplayout.LayoutStyle;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ScrollBar;

public class SubScrollCompsite extends ScrolledComposite {
	private Composite composite;
	public Color color;

	public SubScrollCompsite(Composite parent, int count) {
		super(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
		{
			showComposite(this,parent,count);
		}
		setContent(composite);
		setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
	}
	
	//设置ScrolledComposite相关属性
	private void setScrollBar(ScrolledComposite scrolledComposite){
		if (scrolledComposite != null) {
			ScrollBar vscrollBar = this.getVerticalBar();
			vscrollBar.setIncrement(100);
			super.setContent(composite);
			super.setExpandHorizontal(true);
			super.setExpandVertical(true);
			super.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
			super.setFocus();
		}
	}

	//用于显示Composite里面的组件
	public void showComposite(ScrolledComposite scrolledComposite,Composite parent,int count) {
		if (scrolledComposite == null) {
			scrolledComposite = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
		}
		composite = new Composite(scrolledComposite, SWT.NONE);
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 5;
		composite.setLayout(gridLayout);
		{
			for (int i = 0; i < count; i++) {
				Group group_1 = new Group(composite, SWT.NONE);
				final 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));
						color = new ProduceColor().produceColor();
						button2.setBackground(color);
						inputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
					button2.addSelectionListener(new SelectionAdapter() {
						@Override
						public void widgetSelected(SelectionEvent e) {
							color = button2.getBackground();
							ProduceColor.color = color;
						}
					});
				}
				{

					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);
			}
		}
		setScrollBar(scrolledComposite);
	}
}

B:新建一个SWT Application Window类,通过选择上面的 SubScrollCompsite 为组件拖动到设计界面上进行布局。如下图:


然后,如图:


点击“OK”,这样就可以在设计界面上进行使用了。

(当然,也可以进行手动在代码中,进行添加组件)。

处理过后的源代码为:

package com.swtcomponent;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.grouplayout.GroupLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class DemoTest {

	protected Shell shell;
	private SubScrollCompsite subScrollCompsite;
	private Canvas canvas;

	/**
	 * Launch the application.
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			DemoTest window = new DemoTest();
			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 composite = new Composite(shell, SWT.NONE);
		{
			canvas = new Canvas(composite, SWT.BORDER);
			canvas.setBackground(new Color(Display.getDefault(), 200,200, 200));
			canvas.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseDown(MouseEvent e) {
					GC gc = new GC(canvas);
					Rectangle rect = canvas.getClientArea();
					gc.fillRectangle(rect.x, rect.y, rect.width,rect.height);
					gc.setForeground(ProduceColor.color);
					Font font = new Font(Display.getDefault(),"Arial", 32, SWT.BOLD);
					gc.setFont(font);
					gc.drawText("SHOW TEXT", e.x, e.y);
				}
			});
		}
		Button btnbutton = new Button(composite, SWT.NONE);
		btnbutton.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				showSomething(500);
			}
		});
		btnbutton.setText("500个Button");
		Button button_1 = new Button(composite, SWT.NONE);
		button_1.setText("改变字体颜色");
		GroupLayout gl_composite = new GroupLayout(composite);
		gl_composite.setHorizontalGroup(gl_composite.createParallelGroup(
				GroupLayout.LEADING).add(canvas, GroupLayout.DEFAULT_SIZE, 468,
				Short.MAX_VALUE).add(
				GroupLayout.TRAILING,
				gl_composite.createSequentialGroup().addContainerGap(125,
						Short.MAX_VALUE).add(button_1).add(68).add(btnbutton)
						.add(131)));
		gl_composite.setVerticalGroup(gl_composite.createParallelGroup(
				GroupLayout.LEADING).add(
				gl_composite.createSequentialGroup().add(canvas,
						GroupLayout.DEFAULT_SIZE, 479, Short.MAX_VALUE).add(48)
						.add(
								gl_composite.createParallelGroup(
										GroupLayout.BASELINE).add(btnbutton)
										.add(button_1)).add(81)));
		composite.setLayout(gl_composite);
		{
			showSomething(300);
		}
	}

	public void showSomething(int count) {
		if (subScrollCompsite == null) {
			subScrollCompsite = new SubScrollCompsite(shell, count);
		} else {
			subScrollCompsite.showComposite(subScrollCompsite, shell, count);
		}
	}
}

C:处理颜色的类为:

package com.swtcomponent;

import java.util.Random;

import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;

public class ProduceColor {
	public static Color color;
	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;
	}
}

D:实现完成,效果图为:


D:文章到此结束。


===========================    OVER   ======================================




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万+

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

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

小子宝丁的博客 684

ScrolledComposite自动出现滚动条

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

SWT ScrolledComposite解释

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

最佳 Java 编程 993

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

记录 ScrolledComposite 内容区填充的方法

小子宝丁的博客 604

滚动面板ScrolledComposite

import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.*; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.layout.*; public class B{ public static void main(String[] arg...

Grace_1203的博客 783

SWT ScrolledComposite滚动面板设置

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

angel_xiaa的专栏 8975

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

ScrolledComposite 转帖2

工作中一个任务是为一个已经有的Composite添加滚动条,原以为可以这样实现:    Composite scrollabledComposite = new Composite(parent, SWT.H_SCROLL | SWT.V_SCROLL);     再设置一下其它的参数就可以了,谁知这样是可以添加滚动条,但是滚动条里的Composite根本不会跟着动;于是,查API,发现有Scro

tenor的专栏 1626

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

在项目中要用到SWT中我不熟悉的随机产生RGB颜色ScrolledComosite的应用。因此,我学着做了一个包含这两个技巧的用法的DEMO分享出来。 A. SWT中产生随机RGB颜色的方法,由于RGB颜色是由红、绿、蓝三种颜色组成的,因此在产生的时候只需要随机产生这三种颜色的值就可以了。 (1)在SWT中提供了一个Color类,它的构造函数为 new Color(Dis

CaptainGan的专栏 4559

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

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

zmfCSDN的博客 1015

ScrolledComposite设置滚动距离

首先说明的是: 为了用滚动面板最好用3个层次的Composite: befComposite---滚动面板的直接父类; scrolledComposite---滚动面板自己;inComposite--滚动面板的直接子类,用于存放各种子控件。 Java代码 CompositebefComposite=newComposite(shell,SWT.NONE); gridData=newGridData(GridData.FILL_BOTH); befCompo...

源辰_付鹏程 535

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图像处理

Standard Widget Toolkit ( SWT,标准窗口小部件工具箱),是在 Eclipse 平台上使用的窗口小部件工具箱,它能向开发者提供和本机平台一致的用户界面和比较稳定的性能,也提供了强大的图像处理功能。本文首先介绍 SWT 封装的 Image, ImageData 等类,接着根据作者实际工作经验给出了一些常见图像处理的解决方法。  SWT

GreenVesture的专栏 1177

生成随机颜色

生成一个随机颜色: const randomColor = Math.floor(Math.random()*16777215).toString(16); 下面是一个完整的用例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0

前端精髓 1万+
上一篇: 图片放大、缩小、恢复操作的实现
下一篇: Struts1.x 实现文件上传
CaptainGan
博客等级 码龄18年 23粉丝 12原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值