java心得--check、list、scroll、dialog

本文详细介绍了Java AWT中的各种组件,包括选择组件如复选框、单选按钮、下拉列表框、列表框等,以及滚动组件、菜单组件、对话框组件等。深入探讨了这些组件的构造方法、常用方法、触发事件及其处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.  选择组件

选择组件是指专门用于从多个条目中进行单选或多选操作的AWT组件。

µ    复选框和单选按钮
复选框提供两种状态:选中|未选中。java.awt   包中的Checkbox类用于建立复选框。

ü    构造方法
   public Checkbox()
   public Checkbox(String str) :复选框右边的标题文本
   public Checkbox(String str,Boolean b): b是复选框的初始状态
    public Checkbox(String str,Boolean b,CheckboxGroupg):复选框属于哪一组,这时的复选框即为单选按钮其他方法
public Boolean getState();
public setState(boolean b):设置复选框的状态。
public getLabel():获取复选框右边的标题文本。
public setLabel(String s);

ü    触发事件
选择或取消选择一个复选框会触发选项事件ItemEvent,对应的监听接口ItemListener,事件处理方法为:
public void itemStateChanged(ItemEvent e);

ü    注册监听/删除监听的方法
public void addItemListener(ItemListener);

public voidremoveItemListener(ItemListener);

2.  下拉列表框Choice

用户可以在下拉列表框中看到第一个选项和它旁边的箭头按钮,当用户单击箭头按钮时,选项列表打开。

ü    构造方法
public Choice();

ü    其他方法
public void add(String name):增加一个列表项name。
public void insert(String name ,int index);
public void remove(String  name);
public void remove(int  index);
public void removeAll();

ü    其他方法
public void select(String  name):把下拉列表框中名称是name选项设置成选中状态。
public void select(int  index);
public int getItemCount():返回列表项的总数。
public int getSelectedIndex():返回当前下拉列表框中被选中的列表项的索引值,索引的起始值是0.
public String getSelectedItem():返回当前下拉列表框中被选中的列表项的名称。

ü    触发事件
当用户在下拉列表框中选中某个列表项时就触发ItemEvent选项事件,监听接口:ItemListener。注册和删除监听的方法:
public void addItemListener(ItemListener l);
public void removeItemListener(ItemListener l);

    以上方法中index的值均为非负值,并且小于下拉列表框的列表项总数,否则会发生ArrayIndexOutOfBoundsException异常。

3.  列表框List

包含如干列表项,用户可以选择列表框中的一项或多项。当列表框中的列表项数超过了列表框的高度,则列表框自动增加垂直滚动条,用户可以通过滚动的方式选择列表项。

ü    构造方法
public List();
public List(int n);
public List(int n,boolean b):参数n设置可见行数,b为true时设置是否允许多选,否则禁止多选。

ü    常用方法

ü    其他方法
public int getSelectedIndex();
public String getSelectedItem();
public int[] getSelectedIndexes():所有列表项的索引值项目。
public String[] getSelectedItems();

ü    触发事件

µ   当用鼠标单击列表框的某个列表项后,触发ItemEvent事件;

µ   当用鼠标双击某个列表项后,触发ActionEvent事件。

4.      选择组件的两种不同使用方式:

µ    将若干选择组件组成信息提交表单,然后整体提交和处理。

µ    在某个选择组件的选择状态发生变化时,立即进行响应和处理。

5. 滚动组件
AWT中的滚动组件包括Scrollbar(滚动条)和滚动面板(ScrollPane)两种。

µ     滚动条ScrollBar:在指定的取值范围内快速选取某一值的功能。

µ   构造方法
public Scrollbar(int orientation,int value,int visible,int minimum,int maximum)

参数orientation的取值:Scrollbar.HORIZONTAL表示水平滚动条;Scrollbar.VERTICAL表示垂直滚动条。Value:滑块在滚动条中的初始值。 Visible:滑块大小。  Minimum:滑块最小值。 Maximum:滑块最大值。

ü    常用方法
public void setValue(int value);
public int getValue();
public void setBlockIncrement(int value):指定滚动条的块增量。
public void setUnitIncrement(int value):指定滚动条的单位增量。

ü    触发事件
当用户通过鼠标操作(比如拖动滑块位置)来改变滚动条中滑块的位置时,会触发AdjustmentEvent类型事件,对应的监听接口为:AdjustmentListener,事件处理方法:
public void adjustmentValueChanged( AdjustmentEvent e);

滚动条注册或删除事件监听的方法:
public void addAdjustmentListener(AdjustmentListener l);
public void removeAdjustmentListener(AdjustmentListener

滚动面板:

Java.awt.ScrollPane该类直接继承了Container,但和其他的组件(如:Frame、Panel)有所不同,ScrollPane组件只包含单个组件并支持对所包含的组件进行水平或垂直方向的滚动操作(可以采用容器嵌套的方式实现一个滚动面板中同时显示/滚动多个组件)。且没有默认的布局管理器(其默认布局管理器为null),也不允许使用setLayout()方法设置其布局方式。

 可以将ScrollPane理解为拥有水平和垂直滚动条的特殊Panel。

6. 菜单组件

菜单组件包括包括MenuBar(菜单条)、Menu(菜单)、MenuItem(菜单项)、CheckboxMenuItem(带复选框的菜单项)和PopupMenu(弹出式菜单)。

其使用的原则是:

先创建菜单条对象并将其添加到指定菜单容器(即能够容纳MenuBar的容器)中,再向菜单条中添加菜单Menu组件,菜单组件可以嵌套包含同类组件以实现多级菜单,只有最后一级才使用菜单项,MenuItem的用法跟Button相同,常在其上注册ActionListener监听器已触发真正的处理逻辑。

                               

µ    菜单条MenuBar
MenuBar mb=new MenuBar();
frame.setMenuBar(mb);

µ    菜单Menu
Menu mnFile=new Menu(“文件”);
Menu mnEdit=new Menu();
mb.add(mnFile);
mb.add(mnEdit);

µ    菜单项MenuItem
public MenuItem();
public MenuItem(String label);
public MenuItem(String label,MenuShortcut s);

参数s用于设置菜单项的快捷键,是MenuShortcut类的对象,该类的构造函数为MenuShortcut(intkey);参数key取KeyEvent类中的静态常量

MenuItem miOpen=new MenuItem(“打开”);
MenuShortcut msc=new MenuShortcut(KeyEvent.VK_E);

mnFile.addSeparator():分隔条

菜单项触发的事件:ActionEvent

7.二级菜单和复选菜单项

µ    二级菜单:菜单中嵌套菜单

µ    复选菜单项(CheckboxMenuItem)

注意:用鼠标单击复选菜单项引发的事件是ItemEvent,因此要具体实现的监听接口为ItemListener。

8. 弹出式菜单(PopupMenu)

µ    构造方法
public  PopupMenu();
例如:PopupMenu popM=new PopupMenu();
MenuItem miOpen=new MenuItem(“打开”);
MenuItem miSave=new MenuItem(“保存”);
popM.add(miOpen);  
popM.add(miSave);

µ    由于弹出式菜单默认是不可见的,通常将它附着在某个组件或容器上,然后对该组件或容器增加鼠标监听。例如:txt.add(popM);

µ    显示弹出式菜单
public void show(Component origin,int x,int y);

µ    鼠标事件类中的方法isPopupTrigger()用于返回鼠标事件是否为该组件的弹出菜单触发的事件。

  Windows系统中是鼠标右键松开时触发的。而Mac OS系统中则是当鼠标按下时触发的,为了简化编程,MouseEvent类提供了一个统一的方法isPopupTrigger()来检测此当前鼠标事件是否为所在平台的弹出式菜单触发事件,如果是则返回true。

9. 对话框

µ    对话框组件Dialog:界面效果和Frame类似,是一个拥有边框和最大化、最小化、关闭按钮的顶级窗口,其中也可以添加其他的组件或容器,但不同之处在于对话框组件主要用于接收用户某种形式的简单输入,起到“确认”操作或“警告/提示”的作用。

  

10. 需注意:

Dialog组件的默认布局管理器是BorderLayout类型,且默认初始化为不可见的,需要使用setVisible(true)方法使之显示出来

Dialog组件虽然是顶级窗口,但必须依赖一个其他的窗口而不能单独存在,所依赖的窗口称为对话框的所有者(Owner),通常是Frame或其他Dialog。

当其所有者窗口最小化时,Dialog也会自动隐藏为对用户不可见,当所有者窗口被还原时,Dialog重新变为可见

11.   通过建立Dialog的子类来建立一个对话框类,然后这个类的一个实例,即该类的一个对象,就是一个对话框。

构造方法
public Dialod(Frame f,String s):构造一个具有标题的初始不可见的对话框,s是对话框的标题,f是对话框的所有者。
public Dialod(Frame f,String s,boolean b):b决定对话框是否为有模或无模式。

µ   常用方法
public String getTitle();
public void setTitle();
public void setModal(Boolean model):设置模式
public void setSize(int width,int height);
public void setVisible(boolean b);

12. 对话框分为无模式对话框(ModelessDialog)和有模式对话框(Modal Dialog)两种:

-      有模式对话框将阻断输入到其所在应用程序中其他所有窗体的内容,例如MS Word中的文件对话框。

-      无模式对话框显示与否都不影响所在应用程序其他窗体的,通常用于提供非必须的辅助性功能,如Word的“查找/替换”对话框。

13. 文件对话框FileDialog

文件对话框java.awt.FileDialog,继承了Dialog类,但属于有模式对话框,用于在打开和保存文件时指定文件的路径和文件名。默认为打开方式,也可以在构造方法中显示指定其工作方式。

µ   构造方法
public FileDialog(Frame f,String s, int mode):mode指定对话框的工作方式:“打开”或“保存”,取值:FileDialog.LOAD、FileDialog.SAVE

µ   常用方法
public String getDirectory():返回文件对话框中选定文件的所属目录。
public String getFile():返回文件对话框中选定文件名,如果文件不存在则返回null。

14. 需注意,文件对话框仅仅提供了一个文件操作的界面,要真正实现对文件的操作应使用文件的输入输出流(方法loadFile()、saveFile()和saveFileAs()中都用到了文件的输入/输出流的操作)。

 

转载于:https://www.cnblogs.com/yangkai-cn/archive/2012/05/16/4017538.html

<template> <view class="app-container"> <!-- 顶部操作栏 --> <view class="action-bar"> <button type="default" size="mini" @click="handleExport" v-if="hasPermi(['gjstjgjlb:sj32:export'])">导出</button> </view> <!-- 查询按钮 --> <view class="search-button"> <button type="primary" @click="openSearchDialog">查询记录</button> </view> <!-- 数据列表 - 多行形式 --> <view class="data-list" v-if="sj32List.length > 0"> <view class="data-card" v-for="(item, index) in sj32List" :key="index"> <!-- 卡片头部 --> <view class="card-header"> <text class="card-title">{{ item.gcmc || '未命名工程' }}</text> <text class="card-subtitle">ID: {{ item.id }}</text> </view> <!-- 卡片内容 - 每个字段单独一行 --> <view class="card-body"> <!-- 采集时间 --> <view class="data-row"> <view class="data-label">采集时间:</view> <view class="data-value">{{ formatDate(item.time) }}</view> </view> <!-- 施工时间 --> <view class="data-row"> <view class="data-label">施工时间:</view> <view class="data-value">{{ formatDate(item.sgsj) }}</view> </view> <!-- 采集地点 --> <view class="data-row"> <view class="data-label">采集地点:</view> <view class="data-value">{{ item.position || '-' }}</view> </view> <!-- 施工单位 --> <view class="data-row"> <view class="data-label">施工单位:</view> <view class="data-value">{{ item.sgdw || '-' }}</view> </view> <!-- 监理单位 --> <view class="data-row"> <view class="data-label">监理单位:</view> <view class="data-value">{{ item.jldw || '-' }}</view> </view> <!-- 合同号 --> <view class="data-row"> <view class="data-label">合同号:</view> <view class="data-value">{{ item.hth || '-' }}</view> </view> <!-- 编号 --> <view class="data-row"> <view class="data-label">编号:</view> <view class="data-value">{{ item.bh || '-' }}</view> </view> <!-- 人员编号 --> <view class="data-row"> <view class="data-label">人员编号:</view> <view class="data-value">{{ item.userid || '-' }}</view> </view> <!-- 抽检数量 --> <view class="data-row"> <view class="data-label">抽检数量:</view> <view class="data-value">{{ item.cjsl || 0 }}根</view> </view> <!-- 工程部位 --> <view class="data-row"> <view class="data-label">工程部位:</view> <view class="data-value">{{ formatGcbw(item) }}</view> </view> <!-- 钢筋规格 --> <view class="data-row"> <view class="data-label">钢筋规格:</view> <view class="data-value">{{ item.gjgg || '-' }}</view> </view> <!-- 代表数量 --> <view class="data-row"> <view class="data-label">代表数量:</view> <view class="data-value">{{ item.dbsl || 0 }}根</view> </view> <!-- 检验结论 --> <view class="data-row"> <view class="data-label">检验结论:</view> <view class="data-value">{{ item.jyjl || '-' }}</view> </view> <!-- 不合格处理 --> <view class="data-row"> <view class="data-label">不合格处理:</view> <view class="data-value">{{ item.bhgcl || '-' }}</view> </view> <!-- 施工员 --> <view class="data-row"> <view class="data-label">施工员:</view> <view class="data-value">{{ item.sgy || '-' }}</view> </view> <!-- 专业工程师 --> <view class="data-row"> <view class="data-label">专业工程师:</view> <view class="data-value">{{ item.zygcs || '-' }}</view> </view> <!-- 环通规 --> <view class="data-row"> <view class="data-label">环通规:</view> <view class="data-value"> <view :class="['check-icon', item.htg ? 'checked' : '']"> {{ item.htg ? '√' : '×' }} </view> </view> </view> <!-- 环止规 --> <view class="data-row"> <view class="data-label">环止规:</view> <view class="data-value"> <view :class="['check-icon', item.hzg ? 'checked' : '']"> {{ item.hzg ? '√' : '×' }} </view> </view> </view> <!-- 有效螺纹长度 --> <view class="data-row"> <view class="data-label">有效螺纹长度:</view> <view class="data-value"> <view :class="['check-icon', item.yxlwcd ? 'checked' : '']"> {{ item.yxlwcd ? '√' : '×' }} </view> </view> </view> <!-- 不完整螺纹 --> <view class="data-row"> <view class="data-label">不完整螺纹:</view> <view class="data-value"> <view :class="['check-icon', item.bzlw ? 'checked' : '']"> {{ item.bzlw ? '√' : '×' }} </view> </view> </view> </view> </view> </view> <!-- 无数据提示 --> <view class="no-data" v-else> <text>暂无数据,请点击查询按钮获取记录</text> </view> <!-- 分页控件 --> <uni-pagination v-if="sj32List.length > 0" :current="queryParams.pageNum" :page-size="queryParams.pageSize" :total="total" @change="handlePageChange" /> <!-- 查询弹窗 --> <uni-popup ref="searchPopup" type="dialog"> <view class="search-dialog"> <view class="dialog-title">查询条件</view> <scroll-view scroll-y="true" class="scroll-view"> <view class="form-section"> <!-- 采集时间范围 --> <view class="form-row"> <text class="form-label">采集时间范围:</text> <uni-datetime-picker type="daterange" v-model="daterangeTime" placeholder="选择时间范围" /> </view> <!-- 采集地点 --> <view class="form-row"> <text class="form-label">采集地点:</text> <uni-easyinput v-model="queryParams.position" placeholder="请输入采集地点" /> </view> <!-- 采集人员编号 --> <view class="form-row"> <text class="form-label">采集人员编号:</text> <uni-easyinput v-model="queryParams.userid" placeholder="请输入人员编号" /> </view> <!-- 施工单位 --> <view class="form-row"> <text class="form-label">施工单位:</text> <uni-easyinput v-model="queryParams.sgdw" placeholder="请输入施工单位" /> </view> <!-- 监理单位 --> <view class="form-row"> <text class="form-label">监理单位:</text> <uni-easyinput v-model="queryParams.jldw" placeholder="请输入监理单位" /> </view> <!-- 合同号 --> <view class="form-row"> <text class="form-label">合同号:</text> <uni-easyinput v-model="queryParams.hth" placeholder="请输入合同号" /> </view> <!-- 编号 --> <view class="form-row"> <text class="form-label">编号:</text> <uni-easyinput v-model="queryParams.bh" placeholder="请输入编号" /> </view> <!-- 工程名称 --> <view class="form-row"> <text class="form-label">工程名称:</text> <uni-easyinput v-model="queryParams.gcmc" placeholder="请输入工程名称" /> </view> <!-- 施工时间范围 --> <view class="form-row"> <text class="form-label">施工时间范围:</text> <uni-datetime-picker type="daterange" v-model="daterangeSgsj" placeholder="选择时间范围" /> </view> </view> </scroll-view> <view class="dialog-buttons"> <button type="primary" @click="handleQuery">查询</button> <button @click="resetQuery">重置</button> <button @click="closeSearchDialog">取消</button> </view> </view> </uni-popup> </view> </template> <script> import { listSj32 } from '@/api/gjstjgjlb/sj32' export default { data() { return { // 主数据 sj32List: [], total: 0, loading: false, // 查询参数 queryParams: { pageNum: 1, pageSize: 10, position: null, userid: null, sgdw: null, jldw: null, hth: null, bh: null, gcmc: null, time: null, sgsj: null }, daterangeTime: [], daterangeSgsj: [] } }, onLoad() { // 初始加载数据 this.getList() }, methods: { // 权限检查 hasPermi(permissions) { // 简化权限检查逻辑 return true }, // 打开查询弹窗 openSearchDialog() { this.$refs.searchPopup.open() }, // 关闭查询弹窗 closeSearchDialog() { this.$refs.searchPopup.close() }, // 加载数据 async getList() { this.loading = true // 处理日期范围参数 const params = { ...this.queryParams, params: {} } // 采集时间范围处理 if (this.daterangeTime.length === 2) { params.params.beginTime = this.daterangeTime[0] params.params.endTime = this.daterangeTime[1] } // 施工时间范围处理 if (this.daterangeSgsj.length === 2) { params.params.beginSgsj = this.daterangeSgsj[0] params.params.endSgsj = this.daterangeSgsj[1] } try { const res = await listSj32(params) // 确保布尔字段处理正确 this.sj32List = res.rows.map(item => { // 确保布尔字段转换为布尔值 ['htg', 'hzg', 'yxlwcd', 'bzlw'].forEach(field => { if (item[field] === 'true' || item[field] === 1) { item[field] = true } else if (item[field] === 'false' || item[field] === 0 || item[field] === null) { item[field] = false } }) return item }) this.total = res.total } catch (error) { console.error('加载数据失败:', error) uni.showToast({ title: '加载数据失败', icon: 'none' }) } finally { this.loading = false } }, // 查询处理 handleQuery() { this.queryParams.pageNum = 1 this.getList() this.closeSearchDialog() }, // 重置查询 resetQuery() { this.daterangeTime = [] this.daterangeSgsj = [] this.queryParams = { pageNum: 1, pageSize: 10, position: null, userid: null, sgdw: null, jldw: null, hth: null, bh: null, gcmc: null, time: null, sgsj: null } }, // 分页处理 handlePageChange(e) { this.queryParams.pageNum = e.current this.getList() }, // 导出处理 handleExport() { uni.navigateTo({ url: '/pages/gjstjgjlb/sj32/export' }) }, // 日期格式化 formatDate(dateString) { if (!dateString) return '-' const date = new Date(dateString) return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}` }, // 格式化工程部位 formatGcbw(item) { if (!item.gcbwZh && !item.gcbwDth && !item.gcbwKh) return '-' const parts = [] if (item.gcbwZh) parts.push(`桩号:${item.gcbwZh}`) if (item.gcbwDth) parts.push(`墩台号:${item.gcbwDth}`) if (item.gcbwKh) parts.push(`孔号:${item.gcbwKh}`) return parts.join(' - ') } } } </script> <style lang="scss"> .app-container { padding: 10px; background-color: #f5f7fa; } /* 操作栏样式 */ .action-bar { display: flex; justify-content: flex-end; margin-bottom: 15px; button { font-size: 12px; padding: 4px 8px; } } /* 查询按钮样式 */ .search-button { margin-bottom: 15px; button { width: 100%; background-color: #409eff; color: white; border-radius: 4px; } } /* 数据列表样式 - 多行卡片形式 */ .data-list { display: flex; flex-direction: column; gap: 15px; } .data-card { background-color: #fff; border-radius: 8px; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1); padding: 15px; } .card-header { display: flex; justify-content: space-between; align-items: center; padding-bottom: 10px; border-bottom: 1px solid #eee; margin-bottom: 10px; } .card-title { font-size: 16px; font-weight: bold; color: #333; } .card-subtitle { font-size: 12px; color: #999; } .card-body { display: flex; flex-direction: column; gap: 8px; } .data-row { display: flex; align-items: center; font-size: 14px; line-height: 1.6; min-height: 30px; } .data-label { min-width: 120px; color: #606266; font-weight: bold; margin-right: 5px; } .data-value { flex: 1; color: #303133; word-break: break-word; display: flex; align-items: center; } /* 特殊字段样式 - √/× */ .check-icon { display: inline-flex; justify-content: center; align-items: center; width: 24px; height: 24px; border-radius: 50%; border: 1px solid #dcdfe6; font-size: 18px; font-weight: bold; margin-right: 5px; &.checked { border-color: #67c23a; color: #67c23a; } &:not(.checked) { color: #f56c6c; } } /* 无数据提示 */ .no-data { text-align: center; padding: 40px 0; color: #909399; font-size: 14px; } /* 查询弹窗样式 */ .search-dialog { background: #fff; border-radius: 8px; width: 95vw; max-height: 80vh; overflow: hidden; padding: 20px; } .dialog-title { text-align: center; font-size: 16px; font-weight: bold; margin-bottom: 15px; } .scroll-view { max-height: 60vh; padding-bottom: 15px; } .form-section { padding: 10px; } .form-row { display: flex; flex-direction: column; margin-bottom: 15px; } .form-label { font-weight: bold; font-size: 14px; margin-bottom: 5px; } .dialog-buttons { display: flex; justify-content: space-between; margin-top: 15px; button { flex: 1; margin: 0 5px; &:first-child { background-color: #409eff; color: white; } } } </style> 根据我给你的第一份代码,来简化我现在给你的这份代码
最新发布
07-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值