AWT GUI 设计笔记(二)

[java/初学者/GUI编程]GUI界面设计——界面组件类 GUI,即图形用户界面,其英文全称是Graphics User Interface。它是基于图形的界面,windows就是一个图形用户界面的操作系统,而DOS是基于命令提示符的操作系统,GUI编程就是。 阅读详情
..... 接上篇
4.3:EventAdapter----事件适配器
Java语言为一些Listener接口提供了适配器(Adapter)类。可以通过继承事件所对应的Adapter类,重写需要方法,无关方法不用实现。事件适配器为我们提供了一种简单的实现监听器的手段, 可以缩短程序代码。但是,由于java的单一继承机制,当需要多种监听器或此类已有父类时,就无法采用事件适配器了。

   1.事件适配器--EventAdapter

   2. 用内部类实现事件处理

   3.匿名类(Anonymous Class)
下例中采用了鼠标适配器:
  import java.awt.*;
  import java.awt.event.*;
  public class MouseClickHandler extends MouseAdaper{
    public void mouseClicked(MouseEvent e) //只实现需要的方法
       { ……}
  }

  java.awt.event包中定义的事件适配器类包括以下几个:
  1.ComponentAdapter( 组件适配器)
  2.ContainerAdapter( 容器适配器)
  3.FocusAdapter( 焦点适配器)
  4.KeyAdapter( 键盘适配器)
  5.MouseAdapter( 鼠标适配器)
  6.MouseMotionAdapter( 鼠标运动适配器)
  7.WindowAdapter( 窗口适配器) 

     
用内部类实现事件处理
内部类(inner class)是被定义于另一个类中的类,使用内部类的主要原因是由于:
  ◇ 一个内部类的对象可访问外部类的成员方法和变量,包括私有的成员。
  ◇ 实现事件监听器时,采用内部类、匿名类编程非常容易实现其功能。
  ◇ 编写事件驱动程序,内部类很方便。  
  因此内部类所能够应用的地方往往是在AWT的事件处理机制中。

import java.awt.* ;
   import java.awt.event.*;
     public class InnerClass{
       private Frame f;
       private TextField tf;
       public InnerClass(){
       f=new Frame("Inner classes example");
       tf=new TextField(30);
     }

     public voidi launchFrame(){
       Label label=new Label("Click and drag the mouse");
       f.add(label,BorderLayout.NORTH);
       f.add(tf,BorderLayout.SOUTH);
       f.addMouseMotionListener(new MyMouseMotionListener());/*参数为内部类对象*/
       f.setSize(300,200);
       f.setVisible(true);
     }

     class MyMouseMotionListener extends MouseMotionAdapter{ /*内部类开始*/
       public void mouseDragged(MouseEvent e) {
         String s="Mouse dragging: x="+e.getX()+"Y="+e.getY();
         tf.setText(s); }
       } ;

       public static void main(String args[]) {
         InnerClass obj=new InnerClass();
         obj.launchFrame();
       }
     }//内部类结束
    }

匿名类(Anonymous Class)
当一个内部类的类声名只是在创建此类对象时用了一次,而且要产生的新类需继承于一个已有的父类或实现一个接口,才能考虑用匿名类,由于匿名类本身无名,因此它也就不存在构造方法,它需要显示地调用一个无参的父类的构造方法,并且重写父类的方法。所谓的匿名就是该类连名字都没有,只是显示地调用一个无参的父类的构造方法。
import java.awt.* ;
   import java.awt.event.*;
    public class AnonymousClass{
     private Frame f;
     private TextField tf;
     public AnonymousClass(){
      f=new Frame("Inner classes example");
      tf=new TextField(30);
    }
    public void launchFrame(){
      Label label=new Label("Click and drag the mouse");
      f.add(label,BorderLayout.NORTH);
      f.add(tf,BorderLayout.SOUTH);
      f.addMouseMotionListener(new MouseMotionAdapter(){ //匿名类开始
       public void mouseDragged(MouseEvent e){
        String s="Mouse dragging: x="+e.getX()+"Y="+e.getY();
        tf.setText(s); }
      } ); //匿名类结束
      f.setSize(300,200);
      f.setVisible(true);
      }
       public static void main(String args[]) {
        AnonymousClass obj=new AnonymousClass();
        obj.launchFrame();
        }
      }


五.组件库
5.1.按钮(Button)
按钮是最常用的一个组件,其构造方法是:Button b = new Button("Quit");
  当按钮被点击后,会产生ActionEvent事件,需ActionListener接口进行监听和处理事件。
  ActionEvent的对象调用getActionCommand()方法可以得到按钮的标识名,缺省按钮名为label。
  用setActionCommand()可以为按钮设置组件标识符。

5.2.复选框 (Checkbox)
构造方法如下:
  setLayout(new GridLayout(3,1));
  add(new Checkbox("one",null,true));
  add(new Checkbox("two"));
  add(new Checkbox("three"));
  复选框用ItemListener 来监听ItemEvent事件,当复选框状态改变时用getStateChange()获取当前状态。使用getItem()获得被修改复选框的字符串对象。
5.3复选框组(CheckboxGroup)

  使用复选框组,可以实现单选框的功能。方法如下:
  setLayout(new GridLayout(3, 1));
  CheckboxGroup cbg = new CheckboxGroup();
  add(new Checkbox("one", cbg, true));
  add(new Checkbox("two", cbg, false));
  add(new Checkbox("three", cbg, false));


5.4.下拉式菜单(Choice)

  下拉式菜单每次只能选择其中的一项,它能够节省显示空间,适用于大量选项。
  Choice Colorchooser=new Choice();
  Colorchooser.add("Green");
  Colorchooser.add("Red");
  Colorchooser.add("Blue");
  Choice 用ItemListener接口来进行监听

5.5. Canvas

  一个应用程序必须继承Canvas类才能获得有用的功能,比如创建一个自定义组件。如果想在画布上完成一些图形处理,则Canvas类中的paint()方法必须被重写。
  Canvas组件监听各种鼠标,键盘事件。当在Canvas组件中输入字符时,必须先调用requestFocus()方法。
5.6.单行文本输入区(TextField)

  只能显示一行,当回车键被按下时,会发生ActionEvent事件,可以通过ActionListener中的actionPerformed()方法对事件进行相应处理。可以使用setEditable(boolean)方法设置为只读属性。

  单行文本输入区构造方法如下:
  TextField tf1,tf2,tf3,tf4:
  tf1=new TextField();
  tf2=new TextField("",20); //显示区域为20列
  tf3=new TextField("Hello!"); //按文本区域大小显示
  tf4=new TextField("Hello!",30); //初始文本为Hello!, 显示区域为30列
7. 文本输入区(TextArea)

  TextArea可以显示多行多列的文本。使用setEditable(boolean)方法,可以将其设置为只读的。在TextArea中可以显示水平或垂直的滚动条。
要判断文本是否输入完毕,可以在TextArea旁边设置一个按钮,通过按钮点击产生的ActionEvent对输入的文本进行处理。

 8. 列表(List)

  列表中提供了多个文本选项,列表支持滚动条,可以浏览多项
  List lst=new List(4,false); //两个参数分别表示显示的行数、是否允许多选
  lst.add("Venus");
  lst.add("Earth");
  lst.add("JavaSoft");
  lst.add("Mars");
  cnt.add(lst);

 9. 框架(Frame)

  Frame是顶级窗口,可以显示标题,重置大小。当Frame被关闭,将产生WindowEvent事件,Frame无法直接监听键盘输入事件。

 10. 对话框(Dialog)

  它是Window类的子类。对话框和一般窗口的区别在于它依赖于其它窗口。对话框分为非模式(non-modal)和模式(modal)两种。

 11. 文件对话框(Filedialog)

  当用户想打开或存储文件时,使用文件对话框进行操作。主要代码如下:
  FileDialog d=new FileDialog(ParentFr,"FileDialog");
  d.setVisible(true);
  String filename=d.getFile();

 12. 菜单(Menu)

  无法直接将菜单添加到容器的某一位置,也无法使用布局管理器对其加以控制。菜单只能被添加?quot;菜单容器"(MenuBar)中。

 13. MenuBar

  只能被添加到Frame对象中,作为整个菜单树的根基。
  Frame fr = new Frame("MenuBar");
  MenuBar mb = new MenuBar();
  fr.setMenuBar(mb);
  fr.setSize(150,100);
  fr.setVisible(true);

 14. Menu

  下拉菜单。它可以被添加到MenuBar中或其它Menu中。
  Frame fr = new Frame("MenuBar");
  MenuBar mb = new MenuBar();
  fr.setMenuBar(mb);
  Menu m1 = new Menu("File");
  Menu m2 = new Menu("Edit");
  Menu m3 = new Menu("Help");
  mb.add(m1);
  mb.add(m2);
  mb.setHelpMenu(m3);
  fr.setSize(200,200);
  fr.setVisible(true);

MenuItem

  MenuItem是菜单树中的"叶子节点"。MenuItem通常被添加到一个Menu中。对于MenuItem对象可以添加ActionListener,使其能够完成相应的操作。
  Menu m1 = new Menu("File");
  MenuItem mi1 = new MenuItem("Save");
  MenuItem mi2 = new MenuItem("Load");
  MenuItem mi3 = new MenuItem("Quit");

  m1.add(mi1);
  m1.add(mi2);
  m1.addSeparator();
  m1.add(mi3);

MenuBar和Menu都没有必要注册监听器,只需要对MenuItem添加监听器ActionListener,完成相应操作。
下表中列出了各个组件与所有的监听器的对应关系,打上""表明该组件可以注册此种监听器。

 监听器接口
Act
Adj
Cmp
Cnt
Foc
Itm
Key
Mou
MM
Text
Win
  Button
  Canvas
  Checkbox
CheckboxMenuItem
  Choice
  Component
  Container
  Dialog
  Frame
  Label
  List 
  MenuItem
  Panel
  Scrollbar
  ScrollPane
  TextArea
  TextField
  Window

  Act=ActionListener Adj=AdjustmentListener Cmp=ComponentListener
  Cnt=ConatainerListener Foc=FocusListener Itm=ItemListener
  Key=KeyListener Mou=MouseListener MM=MouseMotionListener
  Text=TextListener Win=WindowListener

Java GUI-AWT Java GUI-AWT sf2gis@163.com 2015年12月29日   1 目标:提供Java的WriteOnce,RunAnywhere的目标,提供跨平台的GUI。 2 原理:针对不同平台调用OS底层的GUI,封装统一API。 但是对于平台特有的组件无法实现Java的跨平台目标,并且Java使用JNI调用底层GUI的方式也给跨平台带来不便。于是Java在后续的GUI中使用 阅读详情

相关推荐

CrackerXI+脱壳实战:解决iOS应用逆向中的加密文件问题

本文详细介绍了如何使用CrackerXI+工具对iOS应用进行脱壳,解决App Store应用因FairPlay DRM加密而无法进行静态分析的难题。通过图形化界面一键操作,CrackerXI+能高效获取解密后的可执行文件,为逆向工程奠定基础。文章涵盖工具选型、实战步骤及常见问题排查,是iOS逆向入门与进阶的实用指南。

seed的博客 257

【Java】AWT和Swing概述

java使用awt和swing可以完成图形化界面编程 其中AWT的全称是抽象窗具集(Abstract Window Toolkit)它是sun公司最早提供的GUI库,这个GUI库提供了一些基本功能,但这个GUI库的功能比较有限,所以后米sun公司又提供了Swing片。通过使用AWT和Swng提供的图形化界面组件片,java的图形化界面编程非常简单。 awt继承体系 其中Container是一种特殊的Component,它代表一种容器,可以盛装普通的Component。 AWT中还有个非常重要

weixin_60719453的博客 8110

光通信仿真入门:手把手教你用VPI和Matlab搭建第一个联合仿真系统(含避坑指南)

本文详细介绍了如何使用VPI和Matlab搭建光通信联合仿真系统,涵盖软件配置、链路搭建、数据交互等关键环节,并提供常见问题的解决方案。特别适合初学者快速掌握光通信仿真技术,避免常见错误,提升仿真效率。

weixin_28733637的博客 377

Java GUI基础学习——AWT+Swing图形化用户界面编程

本博客讲解Java GUI中的知识点,包括Swing和AWT包下的工具类用法,包括Frame弹框、Panel面板,输入框、单选框、多选框、画图工具、监听事件等。

Designer 小郑的技术博客 1436

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装。

weixin_40132006的博客 2240

2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--下篇

我们可以看到,目前配置基本完成了,现在有两个错,一个是Chrome没安装,这个自己安装就可以了,如果不需要WEB测试也不影响开发,另一个是Simulator还没安装,这个主要是安装的时间太长了,也就是上面的这一步。这里要注意,这个下载安装会比较慢,有的载会特别卡造成安装失败,最好的办法是挂一个VPN,保证安装完成,不过这个可以在以后单独进行安装。至此,基本的安装完毕,好多人会以为Xcode就OK了,其实还没有,我们还缺少命令行工具包,这个在安装完Flutter以后进行设置。

weixin_48803304的博客 1411

Java GUI AWT如何搭建一个基本的GUI界面.

Java :swing and AWT 抽象窗口工具组(Abstract Window Toolkit=AWT) 一、AWT 1.包含很多类和接口GUI 2.元素:窗口,按钮,文本框… 3. java.awt 4.组件框架. 二、如何搭建一个基本的GUI界面. 1. 新建一个Frame ** 1.1 直接 ctrl + 左键点击 Frame() 查看源码知道 Frame frame = ne...

半亩方糖 2301

C++利用spdlog生成日志

C++利用spdlog生成日志下载编译spdlog配置并使用 环境:Win10-x64+VS2015 spdlog是一个快速的C++日志库,能够兼容C++11,具备快速、无需依赖第三方库、支持多线程、多平台的优良特性! 下载编译spdlog 1.第一步,下载spdlog 下载spdlog,下载地址:https://github.com/gabime/spdlog#header-only-version,从Github上下载zip压缩包。下载完成后会获取一个名为spdlog-1.x.zip的压缩包 2.第二步

weixin_42975610的博客 3216

浅述GUI和AWT(实例详解)

“随着 Internet 的飞速发展,Java 技术也得到了越来越广泛的应用。而无论我们是采用 J2SE、J2EE 还是 J2ME,GUI 都是不能回避的问题。现在的应用软件越来越要求界面友好、功能强大而又使用简单。而众所周知,在 Java 中进行 GUI 设计相对于其跨平台、多线程等特性的实现要复杂和麻烦许多。这也是很多 Java 程序员抱怨的事情。但 GUI 已经成为程序发展的方向,所以我们也

褚福舜 3432

把财务与管理会计装进一张表:读懂 S/4HANA 的 ACDOCA

别慌,这反而是设计所需。只是大量历史上为汇总、加速而建的索引与汇总表被淘汰或改造,很多被兼容视图 compatibility views 替代,通过视图去 ACDOCA 或 ACDOCT 取数,从而保证老代码还能 SELECT 到数据,但失去写权限。它把原来分散在多张表里的信息整合到一起,例如总账、固定资产、物料账、盈利能力分析 CO-PA、成本控制等维度,发布过的资料多次强调这一点。其二,查询必须带上高选择性的条件,尤其是 RLDNR、RBUKRS、GJAHR 这三个维度,能大幅降低列存扫描的代价。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 944

军品研制过程评审活动-(一)论证阶段

军品研制过程评审活动-(一)论证阶段

Abel的博客 3815

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

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

影龙武的博客qq_43594119 468

【问题解决】解决 Python `PermissionError` 权限不足:文件/进程/端口全场景修复

本文总结了Python程序中常见的权限问题及解决方案,包括文件、进程和端口权限错误。文件权限问题通常由文件占用、权限不足或路径错误引起;进程问题多因权限不足或系统限制;端口问题则与端口占用、防火墙或特权端口相关。解决方案提供了详细的代码实现:文件权限管理器类(FilePermissionManager)包含检查权限(check_permission)、修复权限(fix_permission)、安全写入(safe_write)和安全删除(safe_delete)等方法,通过异常处理和临时文件等技术确保操作安全

博客 357

JAVA从入门到放弃23—GUI/AWT

JAVA从入门到放弃23—GUI/AWT 01 GUI图形用户界面 用于基本GUI程序设计的类库:AWT和Swing AWT:Abstract Window Toolkit,抽象窗口工具箱,基于对等体方法。 Swing:不对等基于GUI工具箱,Java基础类库JFC的一部分 注:Swing没有完全替代AWT。而是基于AWT架构之上。在采用Swing编写的程序中,还需要使用基本的AWT处理事件...

DOGIOOH的博客 370

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

细说Java GUI:AWT,SWT,Swing

历史 Internet上有许多围绕这一争论的故事。你可能已经听说过它们中的大多数了,其中之一有助于让你理清头绪,让我们就从这里开始,Amy Fowler是Swing阵营的一个倡导者。 回到上个世纪90年代,曾几何时有3家庞大的Smalltalk公司——IBM、Parc-Place和 Digitalk。在90年代初期3家公司的市场份额大致相等,生活是美好的。Parc-Place采用仿窗口部件(emulated widgets)的设计(即Swing的设计),IB...

顺其自然~专栏 2258

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

GUI开发之AWT、SWING、SWT和JFACE的比较

 AWT Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。在任何一个 Java 运行环境中都可以使用它。 AWT 是一个非常简单的具有有限 GUI 组件、布局管理器和事件的工具包.有些经常使用的组件,例如表、树、进度条等,都不支持。   通常对于 AWT 来说(也适用于 Swing 和 SWT),每个事件类型都有一个相关的 XxxL

Gaowen_HAN的专栏 7895

JAVA GUI设计

9.1AWT和Swing概述 9.1.1AWT概述 图形用户界面GUI(Graphical User Interfaces),给用户提供了一个交互式的直观图形化操作界面。 提供了程序的外观和感觉 每个Java程序利用GUI图形用户界面接受用户的输入,向用户输出程序运行的结果。 Java语言中,为了方便图形用户界面的开发,设计了专门的类库来生成各种标准图形界面元素和处理图形界面的各种事件。用来生...

AnalogElectronic的博客 3309

GUI编程AWT,面板,布局管理器笔记

GUI编程GUI编程1.简介2.AWT面板Panel布局管理器事件监听 GUI编程 告诉大家该怎么学? 这是什么 它怎么玩 该如何去在我们平时运用 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1.简介 Gui的核心技术:Swing AWT 因为界面不美观 需要jre环境 —逐渐被淘汰 为什么我们要学习 可以写出自己心中想要的一些小工具 工作的时候,也可能需要维护到swing界面,概率极小 了解MVC架构,了解监听! 2.AWT

心比天高,仗剑走天涯,保持热爱,奔赴向梦想! 1948

java包awt_Java抽象窗口工具包(AWT)

java包awt Java抽象窗口工具包(AWT) (Java Abstract Window Toolkit(AWT)) Java AWT is an API that contains large number of classes and methods to create and manage graphical user interface ( GUI ) applications. ...

cunfen6312的博客 2449

Java GUI-AWT详解

文章目录一、GUI-AWT1. AWT介绍2. 容器1)窗口 Frame2)面板 Panel3. 组件1)Button2)Label3)TextField4. 布局管理器1)流式布局 FlowLayout2)边框布局 BorderLayout3)表格布局 GridLayout4)布局容器的综合练习5. 事件监听1)ActionListener 按钮监听2)ActionListener 输入框监听3...

qq_44495081的博客 1358

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)

  JDK中提供了AWT和Swing两个包,用于GUI(图形用户界面)程序的设计和开发。下面为大家介绍一下用AWT如何进行GUI编程。 一、AWT   AWT中有两个核心的类:组件和容器(Component和Container)。组件就是按钮、文本框…而容器就是一个载体,用来添加组件这些元素。   其中容器又分为 Window 和 Panel。Window 可以显示出来,可以向里面添加按钮等组件,...

李十八的博客 477

GUI编程,AWT,Swing

文章目录GUI编程1、简介2、AWT2.1、AWT介绍2.2、组件和容器1.Frame2.面板 Panel3.布局管理器 GUI编程 组成: 窗口 弹窗 面板 文本框 列表框 监听事件 鼠标键盘事件 写破解工具 1、简介 GUI的核心技术:swing、AWT GUI目前几乎被淘汰,其中原因主要是: 界面太不美观。 需要下载比较大的jre环境。 GUI学习下来的作用: 可以写出一些自己想要的小工具。 工作的时候,可能需要维护swing界面。 了解MVC架构,了

qq_44104879的博客 374

Day17——GUI之AWT

文章目录AWT1. 概述1.1 GUI1.2 AWT1.2.1 优点1.2.2 缺点2. 功能2.1 容器2.1.1 窗口(Frame)2.1.2 面板(Panel)2.2布局管理器2.2.1 概述2.2.2 分类2.3 事件监听2.3.1 按钮监听2.3.2 输入框TextField监听2.3.3简易计算器2.3.4 画笔2.3.5 鼠标监听2.3.6 窗口监听2.3.7 键盘监听 AWT 1...

S_numb的博客 638

GUI入门(AWT包)

GUI入门(AWT包) 1.1GUI的概述 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 [1] 图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面...

rsnmd的博客 588
上一篇: AWT GUI设计笔记(一)
下一篇: Swing GUI开发(一)
ybugchen
博客等级 码龄22年 1粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值