Lwuit 组件笔记(转)

2023-12-16 18:18
文章标签 组件 笔记 lwuit

本文主要是介绍Lwuit 组件笔记(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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


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


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

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

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 = new Form("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("Third RadioButton");
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(new BoxLayout(BoxLayout.Y_AXIS));
tp.addTab("Tab 2", radioButtonsPanel)
同时该容器内也可以继续添加组件
radioButtonsPanel.addComponent(RightRB);

列表List组件
DefaultListModel myListModel = new DefaultListModel(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

这篇关于Lwuit 组件笔记(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/501428

相关文章

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element