Draw2d中的布局管理器Layout比较
最近在研究Eclipse中的GEF开发,在跟着GEF-whole-upload教程做一个GEF应用程序的例子时,发现Figure上的控件无法显示,谷歌了很久也没找到解决方案,最后终于发现是Layout的问题。同时发现还没有人进行过这方面的研究,于是打算写一篇文章对各种Layout进行比较。由于GEF的绘图部分使用的是Draw2d,因此本文是关于Draw2d中的Layout比较。
Draw2d中常用的Layout有BorderLayout、ToolbarLayout、FlowLayout、GridLayout、XYLayout。它们都继承于AbstractLayout,类图如下:
下面本文将对这些Layout的用法进行说明。
BorderLayout
BorderLayout是按五个区域进行布局,即上下左右中。代码如下:
protected IFigure createFigure() {
// TODO Auto-generated method stub
Figure figure = new Figure();
figure.setLayoutManager(new BorderLayout());
Label label1 = new Label();
label1.setText("test1");
figure.add(label1, BorderLayout.LEFT);
Label label2 = new Label();
label2.setText("test2");
figure.add(label2, BorderLayout.RIGHT);
Label label3 = new Label();
label3.setText("test3");
figure.add(label3, BorderLayout.TOP);
Label label4 = new Label();
label4.setText("test4");
figure.add(label4, BorderLayout.BOTTOM);
Label label5 = new Label();
label5.setText("test5");
figure.add(label5, BorderLayout.CENTER);
return figure;
}
效果如下:
ToolbarLayout
protected IFigure createFigure() {
// TODO Auto-generated method stub
Figure figure = new Figure();
ToolbarLayout layout = new ToolbarLayout();
layout.setMinorAlignment(ToolbarLayout.ALIGN_TOPLEFT);
layout.setStretchMinorAxis(false);
layout.setSpacing(2);
figure.setLayoutManager(layout);
Label label1 = new Label();
label1.setText("test1");
figure.add(label1);
Label label2 = new Label();
label2.setText("test2");
figure.add(label2);
Label label3 = new Label();
label3.setText("test3");
figure.add(label3);
Label label4 = new Label();
label4.setText("test4");
figure.add(label4);
Label label5 = new Label();
label5.setText("test5");
figure.add(label5);
return figure;
}
效果如下:
FlowLayout
protected IFigure createFigure() {
// TODO Auto-generated method stub
Figure figure = new Figure();
FlowLayout flowLayout = new FlowLayout(true);//水平
flowLayout.setMinorSpacing(20);
flowLayout.setMajorAlignment(FlowLayout.ALIGN_TOPLEFT);
figure.setLayoutManager(flowLayout);
Label label1 = new Label();
label1.setText("test1");
figure.add(label1);
Label label2 = new Label();
label2.setText("test2");
figure.add(label2);
Label label3 = new Label();
label3.setText("test3");
figure.add(label3);
Label label4 = new Label();
label4.setText("test4");
figure.add(label4);
Label label5 = new Label();
label5.setText("test5");
figure.add(label5);
return figure;
}
效果如下:
GridLayout
protected IFigure createFigure() {
// TODO Auto-generated method stub
Figure figure = new Figure();
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
figure.setLayoutManager(gridLayout);
Label label1 = new Label();
label1.setText("test1");
figure.add(label1);
GridData label_gd1 = new GridData();
label_gd1.widthHint = 50;
label_gd1.heightHint = 50;
gridLayout.setConstraint(label1, label_gd1);
Label label2 = new Label();
label2.setText("test2");
figure.add(label2);
Label label3 = new Label();
label3.setText("test3");
figure.add(label3);
Label label4 = new Label();
label4.setText("test4");
figure.add(label4);
Label label5 = new Label();
label5.setText("test5");
figure.add(label5);
return figure;
}
效果如下:
XYLayout
protected IFigure createFigure() {
// TODO Auto-generated method stub
Figure figure = new Figure();
figure.setLayoutManager(new XYLayout());
Label label1 = new Label();
label1.setText("test1");
figure.add(label1, new Rectangle(0, 0, 50, 50));
Label label2 = new Label();
label2.setText("test2");
figure.add(label2, new Rectangle(25, 25, 50, 50));
Label label3 = new Label();
label3.setText("test3");
figure.add(label3, new Rectangle(50, 50, 50, 50));
Label label4 = new Label();
label4.setText("test4");
figure.add(label4, new Rectangle(75, 100, 50, 50));
Label label5 = new Label();
label5.setText("test5");
figure.add(label5, new Rectangle(40, 75, 50, 50));
return figure;
}
效果如下:
Draw2d中的布局管理器Layout比较的更多相关文章
- 第六章 Qt布局管理器Layout
第六章 Qt布局管理器Layout 大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置.当用户改变窗口的大小,组件还静静地呆在原来的 ...
- JAVA中GridBagLayout布局管理器应用详解
很多情况下,我们已经不需要通过编写代码来实现一个应用程序的图形界面,而是通过强大的IDE工具通过拖拽辅以简单的事件处理代码即可很轻松的完成.但是我们不得不面对这样操作存在的一些问题,有时候我们希望能够 ...
- 【java】浅析java组件中的布局管理器
这篇博文笔者介绍一下java组件中,常用的布局管理器.java组件中的布局方式有好几十种,所有的这些布局管理器都实现了java.awt.LayoutManager接口.接下来笔者介绍一下常用的5种布局 ...
- Qt中的布局管理器
1. 布局管理器提供相关的类对界面组件进行布局管理,能够自动排列窗口中的界面组件,窗口变化后能自动更新界面组件的大小. 2. QLayout是Qt布局管理器的抽象基类,通过继承QLayout实现了功能 ...
- GridBagLayout:网格包布局管理器
GridBagLayout:网格包布局管理器 GridBagLayout可以说是布局管理器Layout中最复杂的一个,其中涉及到的参数也比较得多,比如说: GridBagConstraints g ...
- 【Android 应用开发】AndroidUI设计之 布局管理器 - 详细解析布局实现
写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ...
- Swing——布局管理器
前言 在编写图形界面时,总是需要考虑的就是组件放在哪里,组件怎么大才合适.在Swing中就有现成的布局管理器帮我们做这些事情,我们不必写代码去一一安排.下面将介绍什么是布局管理器.Swing中常用布局 ...
- AndroidUI设计之 布局管理器 - 详细解析布局实现
写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ...
- 二、Android应用的界面编程(二)布局管理器
一.线性布局所有布局都可以作为容器类使用,因此可以调用多个重载的addView()向布局管理器中添加组件.实际上,我们完全可以用一个布局管理器嵌套到其他布局管理器中---因为布局管理器也继承了View ...
随机推荐
- jQuery插件学习(一)
由于项目开发需要,经常会用到一些jquery插件,但网上已有的插件常常又不能100%满足业务需求,所以就想自己能看懂插件的代码,进行一些功能上的改动和补充,或者能自己自定义插件就更好了.所以这段时间会 ...
- Project Euler #80: Square root digital expansion
from decimal import getcontext, Decimal def main(): n = int(raw_input()) p = int(raw_input()) getcon ...
- ByteArrayOutputStream的用法
ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的 ...
- HDU 3516 Tree Construction (四边形不等式)
题意:给定一些点(xi,yi)(xj,yj)满足:i<j,xi<xj,yi>yj.用下面的连起来,使得所有边的长度最小? 思路:考虑用区间表示,f[i][j]表示将i到j的点连起来的 ...
- BZOJ 1977 次小生成树(最近公共祖先)
题意:求一棵树的严格次小生成树,即权值严格大于最小生成树且权值最小的生成树. 先求最小生成树,对于每个不在树中的边,取两点间路径的信息,如果这条边的权值等于路径中的权值最大值,那就删掉路径中的次大值, ...
- LeetCode_Surrounded Regions
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- 编程是一项需要时间来掌握的技能(Anders的经验)
Anders现在每天仍然花大量的时间实际写代码,并且未来会一直写下去.他很清醒的知道自己长处:“相比起管理,我还是更擅长于编程.” 事实上,Anders的成名之作Turbo Pascal通过出售软件授 ...
- ScrollView中添加ListView
<p>.要点一:去除ListView的scrollBar,添加ScrollView的scrollBar:</p> <ScrollView android:layout_w ...
- MLC固态硬盘,与入量是3000次P/E
固态硬盘是什么,固态硬盘寿命有多长 SSD泛指使用闪存芯片组成的SSD固态硬盘,是使用FLASH闪存颗粒作为存储单元,不再使用传统的机械存储方法,使用模拟的方式虚拟出传统 硬盘存取方式和扇区等,也可以 ...
- asp.net mvc4中自定义404
原文地址:http://www.chuchur.com/asp-net-mvc4-404/ 定义404 方法当然有很多种.不同的方法所展现的形式也不一样,用户所体验也不一样.以下提供2两种 方法一: ...