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

相关文章

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

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

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

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

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2