oneTableComponents组件的基本使用


主要代码区域

主要字段大意
常用组件示例

1.表单头部的操作按钮
2.表格查询条件
3.Form常用组件示例

3-1 输入框
3-2 下拉选择框(基础值列表、自定义值列表以及请求后端数据加载值列表)
3-3 品牌
3-4 大区
3-5 小区
3-6 经销商
3-7 车系
3-8 日期选择器、月份选择器(单)
3-9 日期选择器(双)
3-7 小区
3-7 小区
3-7 小区
3-7 小区
3-7 小区
3-7 小区
3-7 小区
3-7 小区

2.表格查询条件
2.表格查询条件
2.表格查询条件
2.表格查询条件
2.表格查询条件
2.表格查询条件
2.表格查询条件

表格列表配置

主要代码区域

<one-table-template
    ref="multipleTable"
   :dynamicButtons="tableButtons" // 查询、导出、重置、新增等的组件配置
   :dynamicComponents="tableComponents" // 搜索条件的组件配置
   :dynamicApiConfig="apiConfig" // 列表查询的接口
   :dynamicTableCols="tableCols" // 表格中的字段
   :dynamicFormFields="formField" // 搜索条件的form
   :dynamicUnFormFields="unFormFields" // 搜索条件的form查询时需要排除的多余字段
   :dynamicIsShowSelect="true" // 开启多选
   :selectable="getSelectable" // 多选中不可勾选的规则
>

主要字段大意


字段名代表意思
dynamicButtons查询、导出、重置、新增等的组件配置【tableButtons】
dynamicComponents搜索条件的组件配置【tableComponents】
dynamicApiConfig列表查询的接口【apiConfig】
dynamicTableCols表格中的字段【tableCols】
dynamicFormFields搜索条件的form【formField】
dynamicUnFormFields搜索条件的form查询时需要排除的多余字段【unFormFields】
dynamicIsShowSelect开启多选【true】
selectable多选中不可勾选的规则【getSelectable】

常用组件示例:

  • 1.表单头部的操作按钮【:dynamicButtons=“tableButtons”】

    在 data 中定义 tableButtons 按钮配置数组,并配置如下:

    • 主要参数:
      • name(按钮的 icon 名称)
      • position(可选项有 left 和 right 表示左边按钮还是右边按钮)
      • text 为按钮的名称
      • clickEvent 为按钮的点击事件
      • 查询是封装好的函数,可以直接调用 this.tableQuery(1) 来重置页码成 1 并加载列表数据
      • 重置是封装好的函数,可以直接调用 this.reset() 来还原 form 中的数据
      • 导出是封装好的函数,可以直接调用 this.exportExcel(“精准营销规则维护.xlsx”, “精准营销规则维护”) 来导出表格的数据 ,导出的表格中,如果有状态码没有文字,需要后端加上文字,不然导出的也是状态码
      • mix-table操作表格新、删除或更改 status 状态时,如果表格中有些操作栏如:作废,绑定,需要禁用的,需要将当前按钮的key+1重新渲染一下组件的状态(不然会出现 table 内的操作按钮不会禁用,与判断条件不符的问题)

    tableButtons: [
        {
          compKey: "btnKey1",
          type: "primary",
          size: "small",
          clickEvent: () => this.loadTableData(),
          name: "search",
          position: "right",
          fuzzySearch: true,
          text: this.$t("sys.button.query"), //查询
        },
        {
          compKey: "btnKey2",
          type: "",
          size: "small",
          name: "reset",
          position: "right",
          clickEvent: () => this.reset(),
          text: this.$t("sys.button.reset"),
        },
        {
          compKey: "btnKey7",
          type: "",
          size: "small",
          position: "left",
          clickEvent: () => {
            // this.handleOperation('', 3)
            this.exportExcel("精准营销规则维护.xlsx", "精准营销规则维护")
          },
          text: "导出",
        },
      ],
    

    2.查询条件【:dynamicComponents=“tableComponents”】
    • 主要字段大意
    字段名代表意思
    compKey字段的ref
    labelNameform表单的label字段
    labelWidthform表单的label字段的宽度
    component引入的自定义组件
    lookuptype自定义组件下拉选值列表的code码
    type一般为组件内部定义的组件类型
    readonly是否仅为显示状态
    disabled是否禁用组件
    isMul单选多选,默认false单选
    isMust
    otherField如:品牌改变清空大区、小区的值,需要在大区、小区中填入品牌的字段:(以“,”隔开,以“-”分别区分组件中字段名与网格字段,多个请使用“|”进行分隔)// 格式如:carBrandCode-jzCarBrandCode
    parentFileds如:大区需要与品牌联动 parentFileds: “carBrandCode” ,小区需要与大区、品牌联动 parentFileds: “bigAreaId|carBrandCode” 可以已使用这个字段 (使用这个
    options:[]组件的下拉列表的值
    additionalParamsform中当前组件需要使用到一些父组件中的额外变量:例如:弹窗组件中,给自定义组件赋值父组件选中的品牌
    dataToObject待考证:应该是如上additionalParams 字段同一功能
    component
     <p id="3-3"></p> 
    
    3.Form常用组件示例

    • 输入框

      {
        compKey: "compKey3",
        labelName: "二级规则名称",
        codeField: "rulesTwoName",
        component: () => import("@/components/org/commonInput"),
        type: "inputText",
        isMust: true,
      },
      

    • 下拉选择框(基础值列表、自定义值列表以及请求后端数据加载值列表)

      • 基础值列表(填入lookuptype: “SE9522”)即可
      {
         compKey: "compKey2",
         labelName: "一级规则类型",
         codeField: "rulesOne",
         component: () => import("@/components/org/LookupValue"),
         lookuptype: "SE9522",
         type: "dropdownList",
         isMust: true,
         changeCode: (e) => {},
      },
      
      • 自定义值列表数据
      {
        compKey: "compKey4",
        labelName: "状态",
        codeField: "solicitationRulesStatus",
        component: () => import("@/components/org/LookupValue"),
        type: "dropdownList",
        isMust: true,
        // 1.申请单状态 (1:待提交 2:已提交 3:审核通过 4:驳回)
        options: [
          {
            lookupValueCode: "1",
            lookupValueName: "停止",
          },
          {
            lookupValueCode: "2",
            lookupValueName: "发布",
          },
        ],
        changeCode: (e) => {},
      },
      
      • 加载后端数据值列表
      getLookupValue() {
        let that = this;
        let queryObj = {
          // api配置
          apiConfig: seApis.mdsLookupValueQueryByPage,
          // 需要调用的API服务配置
          apiServices: [
            {
              //表格中台返回网格的字段
              apiQueryRow: ["lookupValueCode", "lookupValueName"]
            }
          ],
          //条件/实体参数(变量),根据typeParam中的定义配置
          variables: {
            pageSize: 10,
            pageIndex: 1,
            //当前中台使用的名称有dataInfo、info,具体查看API文档
            dataInfo: { lookupTypeCode: "SE9522" } //值列表编码
          }
        };
        let paramD = that.$getParams(queryObj);
        // 调用中台API方法(可复用)
        that.$requestGraphQL(paramD).then(response => {
          if (
            response.data[queryObj.apiConfig.ServiceCode].result == "1" &&
            response.data[queryObj.apiConfig.ServiceCode].rows != ""
          ) {
            that.tableComponents.find(v => v.codeField === 'rulesOne').options = response.data[queryObj.apiConfig.ServiceCode].rows;
          }
        });
      },
      
      

    • 品牌

      • 如果有经销商,需要在改变品牌时重新更改经销商组件中的品牌选中值
      {
       compKey: "compKey1",
       labelName: "品牌",
       codeField: "carBrandCode",
       component: () => import("@/components/org/carBrand/carBrand"),
       change: (e) => {
         this.formField.carBrandCode = val
         this.tableComponents.find( o => o.codeField === 'dlrCode').additionalParams.carBrandCode = e;
       },
       type: "dropdownList",
       isMust: true
      },
      

    • 大区

      • 大区与品牌联动 parentFileds: “carBrandCode”
      {
        compKey: "compKey5",
        labelName: this.$t("org.label.region"), // 大区
        codeField: "bigAreaId",
        textField: "smallAreaName",
        parentFileds: "carBrandCode",
        component: () => import("@/components/org/BigAreaNew"),
        type: "propus",
        isMust: true
      },
      

    • 小区

      • 小区与品牌、大区联动 parentFileds: “bigAreaId|carBrandCode”
      {
        compKey: "compKey6",
        labelName: this.$t("org.label.smallAreaName"), // 小区
        codeField: "smallAreaId",
        parentFileds: "bigAreaId|carBrandCode",
        component: () => import("@/components/org/SmallAreaNew"),
        type: "dropdownList",
        isMust: true
      },
      

    • 经销商(与品牌联动)

    • 车系
      • 车系与品牌联动 parentFileds: “carBrandCode”
      • 车系多选 isMul: true
      {
        compKey: "compKey2",
         labelName: this.$t("ve.label.carSeriseName"), // 车系
         codeField: "carSeriesCode",
         textField: "carSeriesCn",
         parentFileds: "carBrandCode",
         component: () =>
           import("@/components/se/chooseCarSeriesSelect.vue"),
         type: "dropdownList",
         filterable: true,
         isMust: true,
         isMul: true
      },
      

    • 车型(与车系联动)

      • 车型与车系联动
      • 有车系时在车系change中清空form中的车型选中值
      • 选择车型清空可采购车型编码
      {
          compKey: 'compKey7',
          labelName: '车型' /* 基础车型*/,
          codeField: 'stdCarId',
          parentFileds: 'value:carBrandCode|carSeriesId',
          component: () => import('@/components/org/basisCarType'),
          change: (val) => {
              this.formField.carConfigCode = "";
          },
          type: 'propus',
          isMust: true
      },
      

    • 内饰颜色

      • 先选择车型,与车型联动
      {
          compKey: 'compKey9',
          labelName: this.$t('org.label.carIncolor'), // 内饰色
          codeField: 'carIncolorId',
          parentFileds: 'stdCarId',
          mustFields: 'stdCarId',
          component: () => import('@/components/org/carIncolor'),
          type: 'propus',
          dataToObject: {
              pageSize: -1,
              isShow: false
          },
          isMust: true
      },
      

    • 选装包(先选车型)

      • 先选择车型,与车型联动
      {
          compKey: 'compKey10',
          labelName: this.$t('ve.label.optional') /* 选装包*/,
          codeField: 'optionalPackId',
          parentFileds: 'stdCarId',
          otherField: 'optionalPackId,optionalPackCn',
          mustFields: 'stdCarId',
          component: () => import('@/components/org/basicCarOptionalPack'),
          type: 'propus',
          isMust: true
      },
      
      
    • 可采购车型编码

      • 选中车型时,清空可采购车型编码
      { 
          compKey: 'compKey4', 
          // label: this.$t('org.label.carTypeall'),
          label: '可采购车型编码', 
          codeField: 'carConfigId', 
          textField: 'carConfig',
          otherField: 'carConfigCode',
          parentFileds: "carSeriesId|stdCarId-stdCarId|stdCarCn-stdCarCn",
          // otherField: "carSeriesId,carSeriesCn,stdCarCn,smallCarTypeId-stdCarId,carConfigId,carConfigCode-carConfig",
          isComponent: true,
          component: () => import('@/components/org/carTypeConfig/New'),
          type: 'propus',
          isMust: true,
          sendCode: () => {},
          emitCode: () => {},
          focusCode:  () => {},
          dataToObject: {
              isNotRequireBrand: true
          }
      },
      
    • 当前处理人

      {
          compKey: "compKey16",
          labelName: "当前处理人", 
          codeField: "employeeid",
          oFields: "empId,empName",
          options: [],
          component: () => import("@/components/org/LookupValue"),
          type: "dropdownList",
          isMul: true,
          isMust: true,
          emitCode: () => {},
          changeCode: () => {}
      },
      
      // 加载当前处理人列表
      loadEmpData() {
      const that = this
      const apiQueryRow= ["orgName", "empName", "empId", "empCode", "userId", "userName", "updateControlId"]
      const queryObj = {
          // 保存 mutation  查询query
          type: "query",
      
          // api配置
          apiConfig: seApis.seMdmOrgEmployeeQueryFindAll, // 服务顾问
          
          apiServices: [{ apiQueryRow: apiQueryRow }],
          variables: {
          // 当前中台使用的名称有dataInfo、info,具体查看API文档
          dataInfo: {
              appPost:'SL,CSL,SA',
              dlrId: this.$store.getters.orgInfo.DLR_ID,
              isMultiple: '1', // 多选
              isEnable: "1", // 在职
          }
          },
      };
      // 转换了中台请求格式数据
      var paramD = that.$getParams(queryObj);
      // 调用中台API方法(可复用)
      that.$requestGraphQL(paramD).then((response) => {
          const msg = response.data[queryObj.apiConfig.ServiceCode].msg
          if (response.data[queryObj.apiConfig.ServiceCode].result === "1") {
          let followEmpArr = response.data[queryObj.apiConfig.ServiceCode].rows;
          this.tableComponents.find(v=>v.codeField=='employeeid').options = followEmpArr
          } else {
          that.$message({
              message: msg,
              type: "warning",
              duration: 2000,
          });
          }
      });
      },
      
      

    • 日期选择器、月份选择器(单)
      • dateType: 默认为 date 可设置为 month 为只选择月份的选择器
      {
        compKey: "compKey9",
        labelName: this.$t("ve.label.auditDateBegin") /*分配开始日期*/,
        codeField: "assignDateBegin",
        component: () => import("@/components/org/datePicker/datePicker"),
        type: "datePicker",
        dateType: "date",
        dateOptionsType: "0",
        isMust: false
      },
      

    • 日期选择器(双)

      • format: 默认为 YYYY-MM-DD HH:mm:ss 也可设置为 YYYY-MM-DD
      • dataToObject.timer:为 true 时则开启默认显示日期
      • dataToObject.hebdomadTime: 为 true 默认一周范围时间
      • dataToObject.thirtyTime: 为 true 默认 30 天范围时间
      • dataToObject.hhmmss: 默认为 false 有时分秒 为 true 没有时分秒
      {
         compKey: "compKey60",
         labelName: "申请时间",
         codeField: "applyTimeBegin,applyTimeEnd",
         component: () =>
           import("@/components/org/datePicker/twoDatePicker"),
         format: "YYYY-MM-DD HH:mm:ss",
         dataToObject: {
           timer: true,
           hebdomadTime: true,
           hhmmss: true,
         },
         type: "twoDatePicker",
         dateOptionsType: "0",
         isMust: true,
         emitCode: () => {},
         changeCode: () => {},
       },
      

    4.表格列表配置
    • 操作及禁用
      • 定义 slot 【isSlot: true】
      {
          prop: "controlBtn",
          label: "操作",
          codeField: "controlBtn",
          width: 120,
          align: "center",
          fixed: true,
          isSlot: true,
       }
      
      • 使用 slot
      	<!-- 操作 -->
         <template #controlBtn="scope"  >
           <!-- 申请单据状态(1:待提交;2:已提交;3:审核通过;4:驳回;5:已取消;6:作废)		 -->
           <span
             :class="['3','5','6'].includes(scope.row.applyStatus) ? 'disabled' : 'link'"
             @click="handleOperation(scope.row, 1)" >
             取消
           </span>
           <span
             :class="['2','3','6'].includes(scope.row.applyStatus) ? 'disabled' : 'link'"
             @click="handleOperation(scope.row, 2)" >
             作废
           </span>
         </template>
      
    • 多选
      • 多选配置代码
      <one-table-template
       ref="multipleTable"
       :dynamicIsShowSelect="true"
       :selectable="getSelectable"
       >
      
      • 多选禁用条件
      getSelectable(row, index) {
      	return !(['2', '3', '6', '5'].includes(row.applyStatus))
      },
      
      • 获取多选选中的数据
      let rows = this.$refs.multipleTable.$refs.multipleTable.selection || [];
      if (rows.length === 0) {
        return this.$message('请先选择数据')
      }
      
    4.常用代码
    • 经销商专营店判断(如:查询条件中经销商和专营店的查询条件不同)
    checkDir() {
      if (this.$store.getters.orgInfo.DLR_ID !== "HOST") {
        this.tableComponents = this.tableComponents.filter((item) => !["carBrandCode", "bigAreaId", "smallAreaId", "dlrCode", "dlrId"].includes(item.codeField));
        this.tableCols = this.tableCols.filter((item) => !["carBrandName","bigAreaName","smallAreaName","dlrNamae","dlrCode"].includes(item.prop));
        this.formField.dlrName = this.$store.getters.orgInfo.DLR_NAME;
        this.formField.dlrId = this.$store.getters.orgInfo.DLR_ID;
        this.formField.dlrCode = this.$store.getters.orgInfo.DLR_CODE;
      }
    },
    
    • 当前处理人
    
    {
        compKey: "compKey16",
        labelName: "当前处理人", 
        codeField: "employeeid",
        oFields: "empId,empName",
        options: [],
        component: () => import("@/components/org/LookupValue"),
        type: "dropdownList",
        isMul: true,
        isMust: true,
        emitCode: () => {},
        changeCode: () => {}
    },
    
    // 加载当前处理人列表
    loadEmpData() {
      const that = this
      const apiQueryRow= ["orgName", "empName", "empId", "empCode", "userId", "userName", "updateControlId"]
      const queryObj = {
        // 保存 mutation  查询query
        type: "query",
    
        // api配置
        apiConfig: seApis.seMdmOrgEmployeeQueryFindAll, // 服务顾问
        
        apiServices: [{ apiQueryRow: apiQueryRow }],
        variables: {
          // 当前中台使用的名称有dataInfo、info,具体查看API文档
          dataInfo: {
            appPost:'SL,CSL,SA',
            dlrId: this.$store.getters.orgInfo.DLR_ID,
            isMultiple: '1', // 多选
            isEnable: "1", // 在职
          }
        },
      };
      // 转换了中台请求格式数据
      var paramD = that.$getParams(queryObj);
      // 调用中台API方法(可复用)
      that.$requestGraphQL(paramD).then((response) => {
        const msg = response.data[queryObj.apiConfig.ServiceCode].msg
        if (response.data[queryObj.apiConfig.ServiceCode].result === "1") {
          let followEmpArr = response.data[queryObj.apiConfig.ServiceCode].rows;
          this.tableComponents.find(v=>v.codeField=='employeeid').options = followEmpArr
        } else {
          that.$message({
            message: msg,
            type: "warning",
            duration: 2000,
          });
        }
      });
    },
    

在这里插入图片描述

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值