亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Draw2d 學習筆記八 GridLayout ToolbarLayout布

系統(tǒng) 2116 0

原文: 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 學習筆記八 GridLayout ToolbarLayout布局管理器
?

文中提到了:

Draw2D里Figure類的setPreferredSize(Dimension)和setSize(Dimension)的區(qū)別是,setSize()方法不會調用revalidate()方法導致重新layout,而只是調用repaint()對所涉及到的“臟”區(qū)域進行重繪(repaint)。setPreferredSize()方法可以約等于setSize()方法+revalidate()方法,因為在Figure對getPreferredSize(int,int)的實現(xiàn)里,若該figure沒有任何layoutmanager,則返回當前size:

例如當父圖形使用XYLayout,子圖形使用ToolbarLayout時,假設在子圖形里又增加了子子圖形(子圖形里的子圖形),add()方法會導致revalidate()的調用,這時父圖形的xylayout將檢查子圖形是否具有constraint,如果有并且有至少一個方向為-1,則利用子圖形上的ToolbarLayout計算出子圖形新的尺寸,這個尺寸是和子圖形里包含的子子圖形的數(shù)目有關的(ToolbarLayout會把每個子圖形的寬/高度加起來,加上其中間隔的空間,再考慮圖形的邊框,返回得到的尺寸)。

?

指出了figure什么時候,調用revalidate()。

Draw2d 學習筆記八 GridLayout ToolbarLayout布局管理器


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲人成影院在线高清 | 综合色图 | 涩涩色中文综合亚洲 | 欧美日韩一区二区在线观看 | 天天干天天操天天干 | 四虎永久在线精品视频免费观看 | 中文字幕视频免费 | 久久免费视频在线观看30 | 男女交黄 | 人人澡 人人澡 人人看欧美 | 久久综合中文字幕一区二区三区 | 亚洲一区在线视频 | 黄色四虎影院 | 亚州综合 | 精品国产你懂的在线观看 | 天天干天天操天天碰 | 香蕉网站在线观看 | 欧美亚洲日本国产综合网 | 老师在办公室被躁到白浆 | 99热久久久这里只有精品免费 | 亚洲视频手机在线 | 国产精品精品 | 视频一区二区在线 | 精品久久中文字幕有码 | 免费福利影院 | 欧美香蕉视频 | 日韩欧美一区二区久久 | 免费看一级a一片毛片 | 成人午夜亚洲影视在线观看 | 亚洲一区二区免费视频 | 国内自拍在线观看 | 国产毛片久久国产 | 中文字幕97 | 99热这里只有精品5 99热这里只有精品66 | 九九在线精品视频播放 | 97在线视频免费观看 | 久久国产精彩视频 | 久草在线观看首页 | 欧美啊v | 日韩精品一区二区三区中文字幕 | 中文字幕精品一区二区精品 |