`

Draw2d 学习笔记八 GridLayout ToolbarLayout布局管理器

 
阅读更多

原文:http://www.cnblogs.com/bjzhanghao/archive/2006/09/05/495747.html

该文章来之“八进制”。

public class Draw2DLayoutExample {
	static Figure canvas;//Parent figure which uses XYLayout as its layout manager
	static RectangleFigure containerFig;//canvas's only child, which uses ToolbarLayout
	static RectangleFigure innerContainerFig;//containerFig's only child, which uses ToolbarLayout, too
	static RectangleFigure firstGreenFig;//innerContainerFig's first child, which has no layout manager
	static Dimension dimension = new Dimension(40, 20);

	public static void main(String args[]) {
		Shell shell = new Shell();
		shell.setLayout(new GridLayout(1, false));

		//Create control buttons
		Button button = new Button(shell, SWT.PUSH);
		GridData gd = new GridData();
		button.setLayoutData(gd);
		button.setText("Add Red");
		Button button2 = new Button(shell, SWT.PUSH);
		gd = new GridData();
		button2.setLayoutData(gd);
		button2.setText("Add Green");
		Button button3 = new Button(shell, SWT.PUSH);
		gd = new GridData();
		button3.setLayoutData(gd);
		button3.setText("Enlarge Green");

		//Draw2d area
		LightweightSystem lws = new LightweightSystem(shell);

		//The canvas figure which fills right half of shell
		canvas = new Figure();
		canvas.setLayoutManager(new XYLayout());
		lws.setContents(canvas);
		System.out.println(canvas.getLayoutManager());

		//A rectangle figure
		containerFig = new RectangleFigure();
		canvas.add(containerFig);
		canvas.getLayoutManager().setConstraint(containerFig, new Rectangle(120, 10, -1, -1));
		
		ToolbarLayout layout = new ToolbarLayout();
		layout.setVertical(true);
		layout.setSpacing(3);
		layout.setStretchMinorAxis(false);
		containerFig.setLayoutManager(layout);
		containerFig.setBorder(new MarginBorder(5));
		RectangleFigure fig = new RectangleFigure();
		fig.setBackgroundColor(ColorConstants.red);
		fig.setSize(dimension);
		containerFig.add(fig);

		//A inner container figure
		innerContainerFig = new RectangleFigure();
		ToolbarLayout layout2 = new ToolbarLayout();
		layout2.setVertical(false);
		layout2.setSpacing(3);
		layout2.setStretchMinorAxis(false);
		innerContainerFig.setLayoutManager(layout2);
		innerContainerFig.setBorder(new MarginBorder(5));
		containerFig.add(innerContainerFig);

		//The first green figure in innerContainerFig
		firstGreenFig = new RectangleFigure();
		firstGreenFig.setBackgroundColor(ColorConstants.green);
		firstGreenFig.setSize(dimension);
		innerContainerFig.add(firstGreenFig);

		button.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				RectangleFigure fig = new RectangleFigure();
				fig.setBackgroundColor(ColorConstants.red);
				fig.setPreferredSize(dimension);
				containerFig.add(fig);
			}
		});

		button2.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				RectangleFigure fig = new RectangleFigure();
				fig.setBackgroundColor(ColorConstants.green);
				fig.setPreferredSize(dimension);
				innerContainerFig.add(fig);
			}
		});

		button3.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				//Make this figure bigger, and see if the outer figure grows accordingly
				firstGreenFig.setPreferredSize(100, 100);
			}
		});

		shell.setSize(500, 400);
		shell.open();
		shell.setText("Draw2D Layout Example");
		Display display = Display.getDefault();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
	}
}

 

 

文中提到了:

Draw2D里Figure类的setPreferredSize(Dimension)和setSize(Dimension)的区别是,setSize()方法不会调用revalidate()方法导致重新layout,而只是调用repaint()对所涉及到的“脏”区域进行重绘(repaint)。setPreferredSize()方法可以约等于setSize()方法+revalidate()方法,因为在Figure对getPreferredSize(int,int)的实现里,若该figure没有任何layoutmanager,则返回当前size:

例如当父图形使用XYLayout,子图形使用ToolbarLayout时,假设在子图形里又增加了子子图形(子图形里的子图形),add()方法会导致revalidate()的调用,这时父图形的xylayout将检查子图形是否具有constraint,如果有并且有至少一个方向为-1,则利用子图形上的ToolbarLayout计算出子图形新的尺寸,这个尺寸是和子图形里包含的子子图形的数目有关的(ToolbarLayout会把每个子图形的宽/高度加起来,加上其中间隔的空间,再考虑图形的边框,返回得到的尺寸)。

 

指出了figure什么时候,调用revalidate()。

  • 大小: 4.6 KB
分享到:
评论

相关推荐

    Draw2d布局器

    本文将深入探讨Draw2d中的几种常见布局管理器,包括BorderLayout、ToolbarLayout、FlowLayout、GridLayout以及XYLayout。 首先,BorderLayout是一种基于五个区域的布局方式,包括顶部(TOP)、底部(BOTTOM)、左侧...

    Draw2d 教程 很详细

    4. **布局管理**:介绍Draw2d的布局管理器,如FlowLayout、GridLayout和StackLayout,以及如何使用它们来组织和排列图形元素。 5. **事件处理**:讲解如何添加鼠标和键盘事件监听器,实现图形元素的交互功能,如...

    在Java中使用Draw2D和SWT绘图的源码

    11. **布局管理**:利用SWT的布局管理器,如`FillLayout`, `GridLayout`, `MigLayout`等,来组织窗口中的组件。 GraFix可能是源码项目的名字,它可能是一个图形修复或图形处理工具的实例,展示了如何在Java中结合...

    draw2d_Demo_code

    2. **布局管理器**:在`Draw2DLayoutExample.java`中,布局管理器如`GridLayout`或`FlowLayout`被用来组织和调整图形对象的位置。布局管理器使得图形界面可以根据窗口大小变化自动调整布局,提供良好的用户体验。 3...

    Draw2d画线例子

    注意,学习Draw2d的过程中,理解如何组织和管理Figure之间的关系,以及如何有效地使用布局管理器(如`FlowLayout`、`GridLayout`)也是十分重要的。 总之,"Draw2d画线例子"提供了一个实践Draw2d库的平台,通过这个...

    draw2d 示例代码

    总结,Eclipse Draw2D 提供了丰富的图形绘制和交互功能,通过深入学习和实践"draw2d 示例代码",开发者能够熟练掌握图形界面的开发技术,为构建美观、易用的图形应用打下坚实基础。无论是简单的形状绘制还是复杂的...

    draw2d精讲

    Draw2D的布局管理十分灵活,提供了多种布局方式,比如FlowLayout、BorderLayout、ToolbarLayout、GridLayout、StackLayout、DelegatingLayout、XYLayout、ScrollPaneLayout和ViewportLayout。每种布局方式都有其特定...

    org.eclipse.draw2d.examples

    2. **丰富的图形组件**:包括容器(如Figure和CompositeFigure)、布局管理器(如GridLayout和StackLayout)以及各种预定义的图形元素。 3. **图形事件处理**:支持鼠标和键盘事件,可以为图形对象添加交互性。 4. *...

    Android学习笔记15:绝对布局管理器AbsoluteLayout

    在本篇“Android学习笔记15:绝对布局管理器AbsoluteLayout”中,我们将深入探讨一种允许开发者精确控制视图位置的布局方式——AbsoluteLayout。尽管在现代Android开发中已经不推荐使用,但在某些特定场景下,它仍然...

    GridLayout 布局管理详细解析

    但当需要更复杂、更动态的布局时,可能需要考虑其他布局管理器。 总的来说,GridLayout是Android开发中的一个重要工具,了解并熟练掌握其用法对于提升应用的界面设计和用户体验有着积极的作用。通过实践和探索,...

    DRAW2D中的 滚动条

    DRAW2D提供了多种布局管理器,如FlowLayout、GridLayout等,可以辅助完成这个任务。 6. **性能优化**:在处理大量图形元素时,高效的滚动条实现能够提高用户体验。这可能涉及到只渲染可视区域内的图形,或者使用...

    Java布局管理GridLayOut BorderLayOut CardLayOut

    学习这些布局管理器的使用,不仅能够提高GUI设计的效率,还能确保界面在不同屏幕尺寸和分辨率下的适应性。在实际开发中,常常需要结合使用多种布局管理器,以实现更复杂、更灵活的界面设计。 例如,一个应用程序...

    AWT组件提供的6种布局管理器

    AWT(Abstract Window Toolkit)组件提供了六种布局管理器,分别是BorderLayout、FlowLayout、GridLayout、GridBagLayout、CardLayout和BoxLayout。这些布局管理器可以帮助开发者更好地管理组件在窗口中的排列。 1....

    Samples about Draw2D

    这里使用`GridLayout`布局管理器,以便将输入字段和按钮均匀分布。每个`Text`控件用于接收用户输入,而`Label`控件则作为提示信息。最后,我们创建了一个“Redraw”按钮,当点击该按钮时,会触发画布的重绘,从而...

    五种布局管理器的经典例子

    在Java GUI编程中,布局管理器是至关重要的组成部分,它负责控制组件在窗口中的位置和大小。本资源提供了五种常见的布局管理器的经典例子,帮助开发者更好地理解和运用这些管理器。下面将详细介绍这五种布局管理器...

    Java Swing布局管理器

    GridBagLayout 布局管理器和 GridLayout 布局管理器不一样的是,一个组件不只是占一个网格位置,加入组件时,必须指明一个对应的参数。 布局管理器的工作过程是,每个容器保存一个对一个布局管理器的引用,这个布局...

    Swing布局管理器

    ### Swing布局管理器详解 #### 一、布局管理器概览 在Java图形用户界面编程中,Swing作为一套强大的工具包,为开发者提供了丰富的组件和功能,其中布局管理器是构建美观且易于维护的GUI应用程序的关键部分。布局...

    使用布局管理器布局界面.rar

    Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout。FlowLayout是最简单的布局,按照从左到右、从上到下的顺序排列组件。BorderLayout将界面分为五个区域:北、南、东...

    布局管理器的嵌套.rar

    本资源包“布局管理器的嵌套.rar”提供了深入讲解这一主题的相关资料,对于想要深入学习Android开发的人来说极具参考价值。 首先,文件“020505_布局管理器的嵌套.avi”很可能是一个视频教程,详细介绍了如何在...

Global site tag (gtag.js) - Google Analytics