AWT编程学习01(未完成)

本文资料来源:《java疯狂讲义》 作者:李刚


终于要学习这一部分了~~虽然很多人(明明是绝大多数的人)说学这个没有用...而且有点过时了...但我觉得很有意思啊...感兴趣就学~~反正多学东西又不会吃亏~~

为啥有趣呢~因为学会了这个,就能做出一些拥有哦图形用户界面的程序,然后放到桌面上用啦~~

开始正经的学习了~~


 

 一:初识AWT

在java.awt包中有两个基类来表示图形界面元素:
  Component表示一个能以图形化方式显示出来,并与用户交互的对象
  MenuComponent表示图形界面的菜单组件
 
在Component类中常用的设置组件大小位置和可见性的方法
  setLocation(int x,int y) ;设置组件的大小
  setSize(int width,int height);设置组件的大小
  setBounds(int x,int y,int width,int height);同时设置组件的位置和大小
  setVisible(Boolean b);设置组件的可见性
 
容器具有盛装其他组件的功能,常用的访问容器组件的方法:
  Component add(Component comp); 向容器中添加其他组件,并返回被添加的组件
  Component getComponentAt(int x,int y);返回指定点的组件
  int getComponentCount();返回容器内组件的数量
  Component[] getComponents(); 返回容器内所有的组件
 

AWT中的三种容器类型(window/Panel/ScrollPane)

 1:window:可以独立存在的顶级窗口

Frame是window的一个子类,是一种常见的窗口,是window的子类,有标题,可以通过拖拉来改变窗口位置,大小,初始化时为不可见,可以使用setVisible(true)使其显现出来,默认使用BorderLayout作为布局管理器

代码示例:

 1 import java.awt.Frame;
 2 
 3 /**
 4  * 创建一个窗口
 5  * */
 6 public class TestFrame {
 7 
 8     public static void main(String[] args) {
 9         
10         Frame f = new Frame("测试窗口");
11         //设置窗口的大小
12         f.setBounds(60,30,300,280);
13         //将窗口显示出来(Frame对象默认处于隐藏状态)
14         f.setVisible(true);
15     }
16 }

结果:运行后,出现了一个窗口

很神奇有没有...是不是就像第一次写出hello,word一样那么兴奋~~
 

2:Panel不能独立存在,外在表现是一个矩形区域,可以盛装其他组件,默认使用FlowLayout作为布局管理器

代码示例:
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextField;

/**
 * 创建一个panel容器
 * 
 * */
public class TestPanel {
    
    public static void main(String[] args) {
        
        //先创建一个主窗口来承载容器
        Frame f = new Frame("测试窗口");
        //设置窗口大小,位置
        f.setBounds(80, 80, 300, 300);
        //再创建一个panel容器
        Panel p = new Panel();
        //向容器中添加组件
        p.add(new TextField(20));
        p.add(new Button("点击有惊喜"));
        //将容器添加到主窗口中
        f.add(p);
        //将主窗口设置成是显示的
        f.setVisible(true);
    }
}

结果:这次是直接用命令窗口编译的...为啥呢...因为eclips的环境可能没配置好...按钮的中文文字是乱码...

 

3:ScrollPane是一个带有滚动条的容器,如果组件过大,会自动产生滚动条,也可以通过指定特定的构造器参数来指定默认具有滚动条。默认使用BorderLayout作为布局管理器,并且通常不允许改变。

代码示例:
import java.awt.Button;
import java.awt.Frame;
import java.awt.ScrollPane;
import java.awt.TextField;

public class TestScrollpana {
    
    public static void main(String[] args) {
        
        //创建一个主窗口并设置位置大小
        Frame f = new Frame("测试窗口");
        f.setBounds(80, 80, 300, 300);
        //创建一个scrollpana 并指定总是有滚动条
        //SCROLLBARS_ALWAYS/SCROLLBARS_AS_NEEDED/SCROLLBARS_NEVER
        //以上三个分别表示(总是有/需要的时候/总是没有)
        ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
        //添加组件
        sp.add(new TextField(20));
        sp.add(new Button("点我有惊喜"));
        //放到主窗口中
        f.add(sp);
        //设置成可以看见的
        f.setVisible(true);
    }
}

结果:

怎么就只有一个按钮了呢?是因为使用了BorderLayout布局管理器,导致了容器中只有一个组件被显示出来了...

那布局管理器到底是啥呢?


 二:布局管理器

 布局管理器到底是啥呢?

“为了使生成的图形用户界面具有良好的平台无关性,java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。”
“对于不同的组件而言,它们都有一个最佳大小(既没有冗余空间,也灭有内容被遮挡),这个最佳大小通常是平台相关的,程序在不同平台上运行时,相同内容的大小可能不一样,如果让程序手动控制每个组件的大小,位置,这将给编程带来巨大的困难,为了解决这个问题,java提供了LayoutManager来解决这个问题,它可以根据运行平台来调整组件的大小,程序员要做的就是为容器选择合适的布局管理器”------引用自《java疯狂讲义》

 如何为容器指定布局管理器呢?

   所有的AWT容器都有默认的布局管理器,可以使用容器对象的 setLayoutManager(LayoutManager lm)方法来为容器对象指定布局管理器

AWT提供的布局管理器

  AWT提供了5个常用的布局管理器(FlowLayout/BorderLayout/GridLayout/GridBigLayout/CardLayout)Swing还提供了一个BoxLayout布局管理器

1:FlowLayout布局管理器

 FlowLayout布局管理器默认从左向右排列所有的组件,遇到边界就折回下一行开始
有三个构造函数:
  FlowLayout():默认对齐方式,默认垂直,水平间距创建
  FlowLayout(int align):使用指定对齐方式,默认垂直,水平间距创建
  FlowLayout(int align,int hgap,int vgap):使用指定对齐方式,指定垂直,水平间距创建
align使用的是FlowLayout类的静态常量(FlowLayout.LEFT, FlowLayout.CENTER, FlowLayout.RIGHT)
代码示例:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

/**
 * 使用FlowLayout布局管理器
 * */
public class TestFlowLayout {
    
    public static void main(String[] args) {
        
        //创建一个主窗口
        Frame f = new Frame("测试窗口");
        //使用FlowLayout布局管理器
        f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 5));
        //添加按钮
        for(int i = 0; i <= 10; i ++ ) {
            f.add(new Button("按钮" + i));
        }
        //将窗口设置为最佳大小
        f.pack();
        //显示窗口
        f.setVisible(true);
    }
}
结果:

拖动窗口,改变窗口大小,可以看到,里面的按钮会跟着窗口的改变而改变位置... 

使用了pack()方法,这样就不用设置窗口的位置和大小,直接生成一个最佳大小的窗口

2:BorderLayout布局管理器

BorderLayout布局管理器将容器分为了五个区域 (EAST,SOUTH,WEST,NORTH,CENTER),普通组件可以被放置在这五个区域中的任意一个。

改变BorderLayout布局管理器的大小时,SOUTH,NORTH,CENTER水平调整,EAST,WEST,CENTER上下调整

注意:

  1:当向使用BorderLayOut布局管理器的容器中添加组件的时候,需要指定要添加到哪个区域里,如果没有指定添加到哪个区域中,则默认添加到中间

  2:如果向一个区域中添加多个组件,后放入的组件会覆盖前面的组件

 代码示例:

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

/**
 * 使用Borderlayout布局管理器
 * */
public class TestBorderlayout {
    
    public static void main(String[] args) {
        
        Frame f = new Frame("测试窗口");
        //使用Borderlayout布局管理器
        f.setLayout(new BorderLayout(30,5));
        f.add(new Button("△"),BorderLayout.NORTH);
        f.add(new Button("×"),BorderLayout.SOUTH);
        f.add(new Button("○"),BorderLayout.EAST);
        f.add(new Button("口"),BorderLayout.WEST);
        f.add(new Button("摇杆"));
        f.pack();
        f.setVisible(true);
    }
}

 

结果:哈哈,摇杆~~

3:GridLayout布局管理器

GridLayout布局管理器将容器分割成网格状,每个网格所占的区域大小相同,添加组件时,默认从左向右,从上向下依次添加到王各种,大小由组件所处的区域决定

构造函数:

  GridLayout(int rows,int cols) 采用指定行数,列数,默认横向间距,纵向间距,将容器分割成多个网格

  GridLayout(int rows,int cols,int hgap,int vgap)采用指定行数,列数,指定横向,纵向间距将容器分割成多个网格

代码示例

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;

/**
 * 使用GridLayout布局管理器
 * */
public class TestGridLayout {
    
    public static void main(String[] args) {
        
        //创建主窗口
        Frame f = new Frame("测试窗口");
        //使用GridLayout布局管理器
        f.setLayout(new GridLayout(3, 4, 5, 5));
        //向主窗口添加按钮
        String [] buttonname = {"7","8","9","-","4","5","6","+","1","2","3","."};
        for(int i = 0;i < buttonname.length; i ++) {
            f.add(new Button(buttonname[i]));
        }
        f.pack();
        f.setVisible(true);
    }
}

 结果:如果数据不对,可能导致结果不是你想要的那样...

4:GridBagLayout布局管理器

GridBagLayout布局管理器也是网格型的,但是一个组件可以跨越一个或多个网格,并且设置各个网格的大小互不相同,增加了灵活性。

java提供了GridBagConstraints对象,与特定的GUI组件关联,用于控制该组件的大小以及跨越性。

GridBagConstraints所提供的方法:

  gridx,gridy:设置受该对象控制的GUI组件的左上角所在网格的横向索引,纵向索引(左上角索引为0,0)也可以设置成GridBagConstraints.RELATIVE,默认值,表示当前组件紧跟在上一组件之后

  gridwidth,gridheight:设置受该对象控制的GUI组就按横向,纵向跨越多少个网格,两个属性值默认为1,如果设置为GridBagConstraints.REMAINDER,表示该组件是横向纵向最后一个组件GridBagConstraints.RELATIVE表示是横向,纵向倒数第二个组件

  fill:设置组件如何占领空白区域

    GridBagConstraints.NONE:组件不扩大

    GridBagConstraints.HORIZONTAL:组件水平扩大以占领空白区域

    GridBagConstraints.VERTICAL:组件垂直扩大以占领空白区域

    GridBagConstraints.BOTH:组件水平,垂直同时扩大以占领空白区域

  anchor:设置受该对象控制的GUI组件在其显示区域中的定位方式

    GridBagConstraints.CENTER:中间

    GridBagConstraints.NORTH:上中

    GridBagConstraints.NORTHWEST:左上 

    GridBagConstraints.NORTHEAST:右上

    GridBagConstraints.SOUTH:下中

    GridBagConstraints.SOUTHWEST:左下

    GridBagConstraints.SOUTHEAST:右下

    GridBagConstraints.EAST:右中

    GridBagConstraints.WEST:左中

   weightx,weighty:设置受该对象控制的GUI组件占领的多余空间的水平,垂直增加比例,属性默认值为0,即该组件不占领多余的空间

 

(---未完---待续---)

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

转载于:https://www.cnblogs.com/zhengchenhui/p/6010013.html

C#的GDI+绘图详解 /消除锯齿 或 AntiAlias。// 1.在窗体或控件的Paint事件中,用PaintEventArgs e 创建绘图对象 ---- 控件或窗体重绘时。//为控件创建绘图对象。//--------------------以上方法三选一。//2.创建绘图对象 panel1中绘图。 阅读详情

相关推荐

刷题单向链表

实现一个数据结构,维护一张表(最初只有一个元素 11)。接下来 qq 行,每行表示一次操作,操作具体间题目描述。a[i] 里面放的是下一个元素,为0代表链表结束。如单链表1->4 -> 2->3->0用数组表示是。对于每个操作 2,输出一个数字,用换行隔开。第一行一个整数 qq 表示操作次数。

power的专栏 1714

java component类_Swing Component类

S.N.方法 & 描述1boolean action(Event evt, Object what) Deprecated. As of JDK version 1.1, should register this component as ActionListener on component which fires action events.2void add(PopupMenu p...

weixin_39984982的博客 344

MavLink协议入门

MAVLink是一个非常轻量化的开源的消息协议,用于无人机之间的通信以及无人机机载设备之间的通信。

ffffffeiyu的博客 2474

getTabComponentAt和getComponentAt

getTabComponentAt() returns the custom component you might add as the tab title. getComponentAt() returns the contents of a tab. The tab component is the component that renders the tab--not the c...

博采众长 748

微信小游戏CE修改实战:从入门到精通(附防作弊思路)

本文深入探讨微信小游戏的安全攻防实战,重点分析CE修改、反编译和重打包等安全风险。通过详细的内存修改案例和代码保护方案对比,提供从客户端到服务端的全方位防护策略,帮助开发者构建有效的防作弊体系。

m2n3b4v5c6的博客 1138

IPC-7351标准实战:如何用LPWizard_10快速生成PCB封装库(附避坑指南)

本文提供了一份详细的IPC-7351标准实战指南,手把手教你使用LPWizard_10软件快速生成符合行业标准的PCB封装库,并直接导入Cadence Allegro。文章深入解读了IPC-7351密度等级的选择逻辑,并重点分享了软件配置、QFN封装生成实战步骤,以及导出失败、焊盘异常等常见问题的避坑解决方案,旨在帮助硬件工程师提升设计效率和可靠性。

weixin_29207439的博客 153

Java AWT编程 布局管理器(四)GridBagLayout

1 /** * 下面程序示范了如何使用GridBagLayout布局管理器来管理窗口中的10个按钮 */ package codes11; import java.awt.Button; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; public clas

moncheri78的专栏 1210

linux内核学习(一)---内核社区介绍及补丁提交

本系列开始会对linux内核进行系统性的学习,以源码与内核社区为基础,了解前沿的内核机制,同时也深度了解linux内核中的一些经典机制 本章会先对linux内核社区进行简单的介绍,包括源码下载、内核社区的修改提交

文艺小少年的博客 536

java,awt,中文方框,中文乱码

第一: 在你的具有main函数的类也即你应用运行的主类上点击右键,选择Run  As中的Run Configurations 第二,在Arguments标签下的VM  arguments中添加下面这行参数代码,然后点击应用。              -Dfile.encoding=GB18030 再运行,就出现正常的中文了

qq_20367813的博客 1925

python基础:工作会用到的95%的基础python代码都在这了(万字详解!)

本文是一份Python编程语言的快速参考备忘单,涵盖了Python基础语法和常用数据类型。主要内容包括:Python入门指南(打印、变量声明)、内置数据类型(字符串、数值、列表、元组、集合、字典等)、控制结构(判断、循环)、函数定义、文件处理操作以及字符串操作方法(切片、循环遍历等)。这个备忘单特别适合初学者快速查阅Python基础语法,同时也提供了数据类型转换、f-string格式化字符串等实用技巧。通过简洁的代码示例展示了Python的基本语法规则和典型用法。

数据知道的博客 8159

OpenClaw安卓手机攻略

想在安卓手机上安装 OpenClaw,目前主要有两种主流方法:一种是使用专门的,操作简单直观;另一种是在命令行环境下进行,自由度更高。你可以根据自己的偏好和动手能力来选择。

suny8的专栏 2899

java awt编程_Java学习之AWT GUI编程

Java学习之AWT GUI编程0x00 前言既然前面提到了要重写冰蝎和一些反序列化工具,当然就不能随便说说而已。在编写这些工具还是要使用图形化工具来的方便一些,所以提前把GUI的框架给学习一遍。其实重写webshell工具这个也就是实现部分,现在就差个gui框架。这里其实是已经完善了单向加密和双向加密的功能,并且服务端aes动态密钥加密也写好了,且可以定义128和256位aes的加密。0x01 ...

weixin_28903111的博客 314

解决【x2openEuler环境检查未通过——CheckRepoCurlActor不通过】问题

摘要:x2openEuler使用默认repo源时出现环境检查失败问题,原因是默认源返回308永久重定向错误。解决方法包括:1)为CentOS主机配置华为yum源;2)在x2openEuler Web界面修改为自定义可用源。具体步骤包括备份原源、下载华为源、清除缓存,并通过curl测试确认新源可用性。最终成功配置openEuler-24.03-LTS-SP1版本的repo源后,环境检查顺利通过。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 258

GUI编程基础01AWT(了解)

文章目录GUI编程基础01简介AWT(抽象窗口工具包)组件和容器第一个Frame窗口Panel面板讲解三种布局管理器流式布局东西南北中表格布局练习 GUI编程基础01 简介 GUI(图形用户界面)核心技术:Swing  AWT GUI目前已不再流行,因为: 界面不美观 需要jre环境(jre环境太大) AWT(抽象窗口工具包) 包含了很多的类和接口 包含很多元素:窗口、按钮、文本框等 java.awt包提供了基本的java程序的GUI设计工具。主要包括下述三个概念: 组件–Component 容

asdfghjkl_zth的博客 1634

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

GUI 01:GUI 编程概述,AWT 相关知识,Frame 窗口,Panel 面板,及监听事件的应用

本文对图形用户界面(GUI)编程进行概述,并对 GUI 的其中一个技术领域 AWT(Abstract Window Toolkit)进行讲述。文章使用 AWT 编写了 Frame 窗口,并为窗口添加了 Panel 面板,同时设置了关闭窗口的监听事件。

积累,沉淀,温故而知新 1710

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【JAVA】<GUI编程>AWT & Swing 图形化编程库

目录 一、GUI编程概述: 二、AWT: 1.AWT简介: 2.组件和容器: 2.1 窗体frame: 2.2 面板Panel: 3.布局管理器: 3.1 流式布局: 3.2 东西南北中: 3.3 网格布局:Grid 4.事件监听: 5.输入框:TextField监听 画笔: 鼠标监听: 窗口监听: 键盘监听: 三、Swing: Swing简介: Swing 类库结构 Swing 容器 JFrame窗体: JDialog弹窗: Icon、ImageIcon标..

范同学的学习历程 975

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

GUI编程—AWT

1、简介 Gui的核心技术: Swing AWT 因为界面不美观。 需要 jre 环境! 2、AWT 2.1、Awt定义 Awt(Abstract Window Toolkit)全称抽象窗口工具集。是基本的GUI类库,AWT也是窗口框架,包含不同平台的窗口系统改中的公共组件。 Awt程序执行时,通过JVM调用OS本地的图形界面来创建与平台一致的对等体。 优点:1. 界面风格与OS窗口 ...

zx123456789kk的博客 396

GUI编程简介 AWT

文章目录GUI编程简介1、简介 GUI编程简介 告诉大家该怎么学? 它是什么? 它怎么玩? 平时如何去应用? 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 外挂:Java 破解工具 1、简介 GUI的核心技术: Swing AWT, 1.界面不美观 2.需要jre环境 为什么我们要学习? 1.可以写出自己心中想要的一些小工具 2.工作时候,有可能需要维护swing界面,概率极小 3.了解MVC架构,了解监听! ...

qq_42143701的博客 414

Java的GUI编程之AWT、Swing

文章目录常用的GUI的组件1、简介2、AWT(较为基础的GUI框架)2.1、Awt介绍2.2、组件和容器2.3、面板Panel2.4、布局管理器AWT布局小结:2.5、事件监听2.5、输入框 TextField 监听2.6、简易计算器,组合+内部类回顾复习!2.7、画笔2.8、鼠标监听2.9、窗口监听2.10、键盘监听3、Swing3.1、窗口、面板3.2、弹窗3.3、标签3.4、面板3.5、按钮...

weixin_35995730的博客 869

Java基础-GUI入门-AWT详解

2.AWT 2.1、AWT介绍 其包含了很多的类和接口。 元素:窗口,按钮,文本框。 Java.awt: 2.2、组件和容器 1、Frame 代码: package com.edwin.lession01; import java.awt.*; //GUI第一个界面 /** * @author EdwinD * @create 2020.08.16 上午 10:03 * @desc **/ public class TextFrame1 { public static v

EdwinD的博客 1万+

java.awt.什么意思,什么是awt ?

Abstract Window Toolkit (AWT)The Abstract Window Toolkit (AWT) supports Graphical User Interface (GUI) programming. AWT features include:A set of native user interface componentsA robust event-handlin...

weixin_33417140的博客 931

Java之GUI编程学习笔记二 —— AWT相关(布局)

GUI编程学习笔记二 —— AWT相关 AWT(抽象的窗口工具)简介 包含了很多类和接口 组件Component 基本组件(可以直接使用,要添加到容器中),button、TextArea、Lable等 容器Container 窗口Windows Frame窗口 弹窗Dialog 面板Panel 用于网页的Applet,现在已经不用了 我的第一个Java图形界面窗口...

影龙武的博客qq_43594119 468

【狂神说Java】阶段一笔记24. java的GUI编程01-AWT

组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具:反编译 class文件 -> 可阅读 1 简介 GUI的核心技术:Swing AWT 因为界面不美观 需要jre环境! 为什么要学习: 可以写出自己的一些小工具 2. 工作时候,可能需要维护swing界面,概率极小 3. 了解MVC架构,了解监听! 2 AWT 2.1 AWT介绍 包含了很多类和接口! GUI:图形用户界面编程 元素:窗口,按钮,

Yy_sushine的博客 511

JAVA-UI编程之-AWT界面编程

概要 JAVA中,界面编程从AWT,SWING,SWT,还有为富互联网(RIA)应用的JavaFX。有各自的存在道题。 AWT,最接近系统底层,比较受限系统,目前基本很少直接应用企业开发。但是更因为他接近系统层,性能上相对较高。特别是嵌入式开发的时候。也有一定的采用价值。 SWING,是在AWT的基础上,封装了更多,更适合跨平台的UI类库。目前企业应用开发比较多。因为是JDK集成的。开发的应...

西湾行者僧 6796

JAVA学习笔记之AWT的应用

AWT(Abstract Window Tookit)是JAVA用于创建用户界面和绘制图形图像的所有类。 1.AWT组件和容器 1).Frame的常见(构造)方法 方法 说明 public Frame() throws HeadlessException 构造一个最初不可见的Frame新实例 public Frame(String title) thr

想去海邊 1799

GUI编程--01--AWT.简介

super

时光里的博客 295
上一篇: 闲谈随笔以及对自己的心里暗示
下一篇: 使用layer.open时content属性传值记录
admin4451
博客等级 码龄12年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值