Lwuit 组件笔记(转)

来源:互联网 发布:flume windows 编辑:程序博客网 时间:2024/05/22 03:20

组件关系
Component为所有的可视化组件的父类,在其之下有四个分支
Container (TabbedPane,Form(Dialog))
TextArea 


List   (ComboBox)
Label    (Button(RadioButton,CheckBox))


Container 可以容纳包括容器在内的其他组件.容器内的组件排列由 布局管理器 负责。

Form 是顶部有 标题栏(Title Bar)、底部是 菜单栏(MenuBar)的容器,标题栏可以写入窗体名称,菜单栏可以写入命令和菜单。两栏之间为内容窗格,该窗格用于放置窗体上的组件。

TabbedPane允许大量部件组放置在同一个空间。每组部件都有一个与之关联的选项卡,用户只能看到与选定选项卡相对应的部件组。默认的选项卡位置在窗格顶部。但是,也可以将其置于左侧、右侧或者窗格下部

对话框
Dialog 是一个“永远处于顶层”的组件。默认情况下,对话框是情景式的 (modal),在销毁之前它将阻塞调用线程

分为五种类型
Alarm
Confirmation
Error
Info
Warning

对话框可用于向用户传递运行时信息,以及收集用户反馈。不同类型的对话框在显示时将会有相应的提示音。可以向对话框中加入图标,以图形方式指示其类型


标签和按钮

Label用于显示图像和文本,但显示内容不能被选中,也不能和用户进行交互。可通过许多对齐功能来精确放置标签和标签上图像的相关文本。

Button 类扩展自 Label 类。按钮有自己的 状态,当它被选中和单击时会生成一个 操作事件。也可以附带图片

按钮的三种状态如下:
Rollover:这通常相当于按钮处于选中状态,获得焦点。
Pressed:当按钮被单击或按下时。
Default:当按钮既未被选中,也未被单击时。

Button 类有两个子类:RadioButton 和 CheckBox。RadioButton 具有 Button类的全部功能。此外,Radiobutton 可以被添加到 ButtonGroup 中,ButtonGroup类允许它在组内保持独占选定状态,只能选中一个;

checkBox 复选框不能是按钮组的一部份,其他和HTML等组件中的功能一样

文本域  TextArea

TextArea 是显示可编辑文本的组件。可使用本机系统编辑器对其进行编辑,这通常会打开一个新的屏幕.


List 列表

LWUIT 采用了 模型-视图-控制器 体系结构
列表的数据结构由 ListModel接口表示。所以列表不会局限于特定数据结构,它可以显示任何实现了该接口对象的信息。同样,列表的呈现由实现ListCellRenderer 的类来完成,因此,开发人员可创建各种类型的外观。

ComboBox 是一种节省空间的组件,单击时会有下拉列表显示。用户可以从列表中选择某项。由于ComboBox 扩展自List,您也可以将自定义模型和呈现程序用于组合框,也就是添加自定义的显示,也就是上面所描述的.


底层资源文件---图像资源,动画资源,位图字体,本地化资源包,主题,可以使用资源编辑器进行管理

布局管理器 ,如下五种
BorderLayout
BoxLayout
FlowLayout
GridLayout
GroupLayout

Style 样式设置,基于组件的样式 (getStyle()),也就是类似HTML中的css设计
颜色
字体
图像
边距
填充
透明度

当生成某个组件后,将会构建一个默认的 Style 对象,也可以使用theme主题,生成全局默认的皮肤主题

Painter 接口允许您在组件背景上绘制图形,LWUIT 包提供了两个类来实现此接口 //需要研究下

BackgroundPainter:根据其自身样式绘制组件背景。
PainterChain:创建一系列产生图层效果的 Painter,每个 Painter 负责绘制一个元素。

UIManager

LWUIT 的一个重要特性是可从单一位置管理整个应用程序的外观。UIManager类可以调整应用程序的视觉方面。该组件可以确保每个应用程序只有一个 UIManager对象。此类的方法可以在所有组件上应用同样的外观,从而动态本地化用户界面。


LookAndFeel
负责应用程序各种呈现方式的接口。通过重写此接口的相应方法,可以完全定制应用程序的外观。LookAndFeel 在 LWUIT包中的具体实现是 DefaultLookAndFeel,该类控制默认外观的实际呈现。通过使用 UIManager 的setLookAndFell方法,可以插入 LookAndFell 的自定义实现。

窗体之间的转换 -----Effect

LWUIT 库支持现有窗体与将要显示的窗体之间的、不同模式的转换实现。这种转换的基本实现是通过 Animation 接口、Motion类、Transition 类、CommonTransitions 类和 Transition3D 类的机制来完成的,可以在com.sun.lwuit.animations 包中找到它们

动画的实现过程

Animation 接 口定义了动画类对象。由于所有组件都实现了 Animation
组件必须在父窗体中对其自身进行注册,以便获得动画回调,从而执行动画任务。如要停止这些回调,组件必须明确取消注册自身

transition 是一个抽象类,该类表示从一个窗体过渡到另一个窗体时的动画,两个具体子类的例子

CommonTransitions:含有实现 Slide 和 Fade 两种通用转换类型的方法。
Transition3D:执行转换(Cube、飞入 和 旋转),要求设备支持 3D 图形 //这里的3D效果可以考虑删除,支持不好

Motion 是用来实现运动效果的类。内置的运动类型包括 linear、spline 和 friction。可以通过实现 Motion的子类来实现其他类型的运动效果


载入主题时,就会从res中读取主题数据,从而对所有相应的属性的组件进行更新,不过只影响未被手动修改的属性

其他功能

日志记录
com.sun.lwuit.util.Log 类提供了将日志信息写入 日志 文件(在 root 目录中创建)的方法,也可以在 Form和控制台上显示日志信息。可以通过 FileConnection API 来使用保存在日志文件中的信息。

3D功能: 在某些移动设备上支持可选的硬件加速,以提高其性能。


LWUIT的Button使用以及窗体布局

布局
BorderLayout  //按照东西南北中的部分方式
BoxLayout-X   //从左向右的布局
BoxLayout-Y   //从上向下的布局
FlowLayout   //从左到右,满时会自动换行
GridLayout   //表格式布局

Demo中还涉及了添加组件的方式,均使用lwuit下的组件
  public Form form = newForm("LayoutDemo");  //新建一个Form

//BorderLayout,就是把窗体布局分成东、南、西、北、中这5部分
       border = new Button("BorderLayout");
       //顾名思义,设置按钮背景的透明度,范围0~255,可以用Util的资源编辑器来预先修改
       border.getStyle().setBgTransparency(100);
       //每个button都需要设计监听事件
       border.addActionListener(this);

对于事件监听的处理和ActionListener一样 实现一个接口

这里通过事件源发出的信息进行处理
public void actionPerformed(ActionEvent arg0) {
       String button_name=((Button)(arg0.getSource())).getText();
       if(button_name.equals("BorderLayout"))
       {}

进行显示的时候
Display.init(this);
Resources r;
try {
r = Resources.open("/javaTheme.res");
UIManager.getInstance().setThemeProps(
r.getTheme(r.getThemeResourceNames()[0]));
LayoutDemo l = new LayoutDemo();
l.form.show();
} catch (IOException e) {
e.printStackTrace();
}
进行init,加载资源文件,显示组件

动态修改布局方式
   form.setLayout(new BoxLayout(BoxLayout.X_AXIS));
           form.setScrollable(true);
           addComponents(form);
           form.show();

通过继承Component来获取绘图的操作

com.sun.lwuit.Command用于类似原有的Command的实现

添加组件后需要使用
form.addComponent(cdlabel); //进行添加到页面之上

Radio组 单选组
final RadioButton thirdRB = new RadioButton("ThirdRadioButton");
form.addComponent(thirdRB);

添加到组
public ButtonGroup group = new ButtonGroup();
group.add(firstRB);


设置样式
Label cdlabel = new Label("CheckBox:");
cdlabel.getStyle().setMargin(Component.BOTTOM, 0);

事件处理机制
ActionListener用于处理组件的事件

firstCB.addActionListener(listener);
用于注册组件事件监听器
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent arg0) {}
}  // 匿名接口的形式进行

设置全局监听器,需要保证当前类实现了ActionListener接口
form.setCommandListener(this);
public void actionPerformed(ActionEvent arg0) {
   //这里处理Command 以及 判断ButtonGroup所选中的RadioButton
       Command cmd=arg0.getCommand();}

显示提示框
Dialog.show("Rb_Cb_Lb",str, "OK", null);

Tab组件
TabbedPane tp = new TabbedPane();
//addTab可以为页面添加控件,也可以是Container(相当于容器的控件)
tp.addTab("Tab 1", new Label("Welcome to TabbedPane demo!"));

也可以添加新的容器
Container radioButtonsPanel = new Container(newBoxLayout(BoxLayout.Y_AXIS));
tp.addTab("Tab 2", radioButtonsPanel)
同时该容器内也可以继续添加组件
radioButtonsPanel.addComponent(RightRB);

列表List组件
DefaultListModel myListModel = newDefaultListModel(str_list);
       List list = new List(myListModel);
提供一个数组生成DefaultListModel的实例,也可以传递数组直接给List的构造函数

  list.addActionListener(this); 进行事件注册

添加组件可以有两个参数 布局和组件
form.addComponent(BorderLayout.NORTH,button);

对话框

Dialog 是一个“永远处于顶层”的组件。默认情况下,对话框是情景式的 (modal),在销毁之前它将阻塞调用线程。对话框共有以下5 种类型:

Alarm
Confirmation
Error
Info
Warning
原创粉丝点击