Swing 之 对话框

一个对话窗口,是一个独立的子窗口,意味着除了主要的Swing应用程序窗口进行临时公告。 大多数对话框目前的错误消息或警告用户,但对话框可以展示图像,目录树,或几乎任何兼容主要的Swing应用程序,管理。

为方便起见,几个Swing组件类可以直接实例化并显示对话框 。 要创建简单,标准的对话框,您可以JOptionPane JOptionPane类。 ProgressMonitor类可以把一个对话框,显示操作的进度。 另外两个类,JColorChooser , JFileChooser ,还提供了标准对话框。 要带出一个打印对话框,您可以使用的打印 API。要创建一个自定义对话框,直接使用JDialog类。

简单的对话框中的代码可以说是微乎其微。 例如,这里是一个信息对话框:

一个信息对话框,要求最少的代码

下面是创建并显示它的代码:

 JOptionPane.showMessageDialog(“帧”,“鸡蛋不应该是绿色的。”);

本节的其余部分包括以下主题:

的对话框概述

每个对话是依赖于一个框架组件。 当该帧被破坏,所以都依赖于它的对话框。 当帧图标,依赖于它的对话框也从屏幕上消失。 当帧deiconified,依赖于它的对话框返回到屏幕上。 一个Swing的JDialog类继承这个从AWT的Dialog类的行为。

一个对话框可以是模式 。 当一个模态对话框是可见的,它会阻止用户输入程序中的所有其他窗口。JOptionPane创建JDialog的模式。 要创建一个非模态对话框,你必须直接使用JDialog类。

从JDK 6中,您可以修改对话窗口中使用的新模式API的方式行为。 见新模式API细节。

JDialog类是AWT的一个子java.awt.Dialog java.awt.Dialog类。 它增加了根窗格容器和Dialog对象为默认关闭操作的支持。 这些, JFrame有相同的功能,和使用JDialog直接使用JFrame非常相似。 如果你打算直接使用JDialog ,那么你就应该明白,在材料使用顶层容器如何制作框架 ,特别是响应窗口闭幕式。

即使当您使用JOptionPane实施一个对话框,你仍然使用JDialog幕后。 原因是JOptionPane是一个简单的容器,可以自动创建JDialog ,并添加自己JDialog的内容窗格。

DialogDemo范例

这里是一个图片显示对话框的应用程序。

DialogDemo让你带了多种对话框

试试这个:
  1. 单击“启动”按钮运行对话框演示使用的Java™网络启动 ( 下载JDK 6或更高版本) 。 另外,编译和运行自己的例子,咨询例如指数 。 启动DialogDemo例如 

  2. 点击显示它! 按钮。 
    模态对话框会出现。 直到您关闭它,应用程序将反应迟钝,虽然会重绘本身如果有必要。 您可以通过点击一个按钮,在对话框或明确,如通过使用对话框的窗口装饰,关闭该对话框。
  3. 在更多的对话框窗格中,单击底部的单选按钮,然后显示它! 按钮。 
    一个非模态对话框会出现。 请注意,DialogDemo窗口保持功能齐全的非模态对话框时。
  4. 虽然非模态对话框显示,图标化DialogDemo窗口。 
    该对话框会从屏幕上消失,直到你deiconify DialogDemo窗口。

JOptionPane特点

使用JOptionPane ,你可以快速创建和自定义几种不同类型的对话。 JOptionPane铺设标准对话框,提供图标,指定对话框的标题和文字,和自定义按钮上的文字提供支持。 其他功能允许您自定义的组件对话框显示指定对话框出现在屏幕上。 你甚至可以指定一个选项窗格中放入一个内部框架 ( JInternalFrame ,而不是一个) JDialog 。

当您创建一个JOptionPane ,外观和感觉特定的代码添加组件JOptionPane JOptionPane,并确定这些组件的布局。

JOptionPane的图标支持,可以让你轻松指定的对话框显示的图标。 您可以使用一个自定义图标,没有图标,或四种标准的任何JOptionPane JOptionPane图标的问题,信息,警告和错误。 每个外观和感觉,自己的四个标准图标版本。 下图显示了在Java(和Windows)的外观和感觉使用的图标。

JOptionPane使用的图标
图标说明Java的外观和感觉Windows外观
问题Java的外观和感觉的对话提问的图标Windows的外观和感觉的对话提问的图标
信息Java的外观和感觉信息对话框的图标在Windows的外观和感觉信息对话框的图标
警告Java的外观和感觉的警告对话框中的图标在Windows的外观和感觉的图标警告对话框
错误Java的外观和感觉错误对话框的图标在Windows的外观和感觉错误对话框的图标

创建和显示简单的对话框

对于最简单的模式对话框,您可以创建和显示对话框使用JOptionPaneshow Xxx Dialog的方法之一。 如果您的对话应该是一个内部框架 ,然后添加Internalshow -例如, showMessageDialog变化showInternalMessageDialog 。 如果您需要控制对话窗口关闭行为,或者,如果你不想对话框模式,那么你应该直接JOptionPane JOptionPane并把它添加到JDialog JDialog实例。 然后调用setVisible(true) JDialog使它出现。

两个最有用show Xxx Dialog对话框的showMessageDialog showMessageDialog showOptionDialogshowOptionDialog 。 showMessageDialog方法显示一个简单的,一个按钮的对话框。 showOptionDialog方法显示自定义的对话框-定制的按钮上的文字,它可以显示各种按钮,可以包含一个标准的文本消息或组件的集合。

另外两个show Xxx Dialog的方法是使用较少。 showConfirmDialog方法要求用户确认的东西,但提出了标准的按钮上的文字,而不是定制用户的情况(启动/取消,例如)按钮上的文字(是/否或本地化的等效例如,)。第四种方法, showInputDialog ,目的是为了显示一个模式对话框,从用户获取一个字符串,使用一个文本字段,一个不可编辑的组合框或列表。

下面是一些例子,从采取DialogDemo.java ,使用showMessageDialog , showOptionDialogJOptionPane构造。对于更多的示例代码, DialogDemo.java参阅DialogDemo.java中列出的其他程序使用对话框的例子。

showMessageDialog
显示一个模式对话框的一个按钮,这是标有“确定”(或本地化的等效)。 您可以轻松地指定的消息,图标和标题对话框显示。 下面是使用一些例子 showMessageDialog :
信息对话框默认的标题和图标
 / /默认的标题和图标
 JOptionPane.showMessageDialog(帧,
     “鸡蛋不应该是绿色的。”);
自定义标题信息对话框,警告图标
 / /自定义标题,警告图标
 JOptionPane.showMessageDialog(帧,
     “鸡蛋不应该是绿色的。”
     “空洞的警告”,
     JOptionPane.WARNING_MESSAGE);
自定义标题信息对话框,错误图标
 / /自定义标题,错误图标
 JOptionPane.showMessageDialog(帧,
     “鸡蛋不应该是绿色的。”
     “空洞的错误”,
     JOptionPane.ERROR_MESSAGE);
信息对话框自定义标题,没有图标
 / /自定义标题,没有图标
 JOptionPane.showMessageDialog(帧,
     “鸡蛋不应该是绿色的。”
     “一个普通的消息”,
     JOptionPane.PLAIN_MESSAGE);
信息对话框自定义标题,自定义图标
 / /自定义标题,自定义图标
 JOptionPane.showMessageDialog(帧,
     “鸡蛋不应该是绿色的。”
     “空洞的自定义对话框”
     JOptionPane.INFORMATION_MESSAGE,
    图标);
showOptionDialog
显示一个模态对话框指定的按钮,图标,消息,标题,等。 使用这种方法,可以改变标准对话框按钮显示的文字。 您还可以执行许多其他类型的定制。
是/否/取消showOptionDialog(在不同的词);
 / /自定义按钮文本
对象[]选项= {“是的,请”
                     “不,谢谢”,
                     “没有鸡蛋,没有火腿!”};
 INT N = JOptionPane.showOptionDialog(帧,
     “你愿意去一些绿色鸡蛋”
     +“火腿吗?”
     “一个愚蠢的问题”,
     JOptionPane.YES_NO_CANCEL_OPTION,
     JOptionPane.QUESTION_MESSAGE,
    空,
    选项​​,
    选项​​[2]);
JOptionPane (构造函数)
创建一个 JOptionPane指定的按钮,图标,消息,标题,等。 然后,您必须添加一个 JDialog的选项窗格,选项窗格上的注册的属性更改侦听,并显示对话框。 有关详细信息,请参阅 停止自动对话闭幕 。
明确使用JOptionPane构造函数
最后JOptionPane optionPane =新JOptionPane(
     “只有这样,才能关闭这个对话框是\ N”
     “按下面的按钮之一。\ N”
     “你懂吗?”
     JOptionPane.QUESTION_MESSAGE,
     JOptionPane.YES_NO_OPTION);

所有的show Xxx Dialog “的方法JOptionPane JOptionPane构造是标准化的,虽然每个方法和构造函数的参数的数目不同。 以下列表描述了每个参数。 要查看一个特定的方法的参数的确切名单, 看到对话框 API 。

Component parentComponent
每个 show Xxx Dialog的方法的第一个参数始终是父组件,它必须是一个框架,一个框架内的一个组成部分,或者为null。 如果您指定的Frame或Dialog,那么该对话框将出现在画面中心,并按照该框架中的焦点行为。 如果你指定一个框架内的一个组成部分,那么该对话框将出现在该组件的中心,并会跟进的该组件的框架的重点行为。 如果指定 为null,然后将挑选的外观和感觉为一个适当的位置“对话框-一般屏幕的中心-对话框不一定会遵循的任何可见的Frame或Dialog的重点行为。

JOptionPane构造函数不包括这种说法。 相反,你指定的父框架,当您JDialog JDialog, JOptionPaneJOptionPane,您JDialog setLocationRelativeTo setLocationRelativeTo方法来设置对话框的位置。

Object message
这需要一个参数指定对话框要显示在其主要领域。 一般来说,你指定一个字符串,结果在对话框中显示一个具有指定文本标签。 几行,您可以拆分的消息把换行符 \n N)内消息字符串字符。 例如:
 “完成了一句:\ N \”绿色鸡蛋... ... \“”
String title
对话框的标题。
int optionType
指定的设置按钮,在对话框的底部出现。 请从以下标准集之一:  DEFAULT_OPTION ,  YES_NO_OPTION , YES_NO_CANCEL_OPTION ,  OK_CANCEL_OPTION 。
int messageType
这个参数决定在对话框中显示的图标。 请从下列值之一:  PLAIN_MESSAGE (无图标),  ERROR_MESSAGE,  INFORMATION_MESSAGE ,  WARNING_MESSAGE ,  QUESTION_MESSAGE 。
Icon icon
在对话框中显示的图标。
Object[] options
一般用来指定在对话框底部的每个按钮上显示的字符串。  在一个标准的对话框中自定义按钮文本的更多信息。 也可用于指定要显示的图标的按钮或按钮组件被添加到该按钮行。
Object initialValue
指定被选中的默认值。

您可以让选项“窗格中显示其默认的图标,或指定使用的消息类型图标或图标参数。 默认情况下,一个选项窗格创建showMessageDialog显示信息的图标,与showConfirmDialog showConfirmDialog showInputDialogshowInputDialog显示问号图标,并与创建了JOptionPane JOptionPane构造函数不显示任何图标。 要指定对话框中显示一个标准的图标或没有图标,指定消息类型对应的图标,你的愿望。 要指定一个自定义图标,使用的图标参数。 该图标参数优先接管的消息类型,只要图标参数有一个非空值,对话框显示指定的图标。

自定义按钮文本

当您使用JOptionPane创建一个对话框,你可以使用标准的按钮上的文字(这看起来可能会有所不同,感觉和语言环境),或指定不同的文本。 默认情况下,选项窗格类型确定按钮出现多少。 例如, YES_NO_OPTION对话框有两个按钮, YES_NO_CANCEL_OPTION对话框中有三个按钮。

下面的代码,从采取DialogDemo.java ,创建两个是/否对话框。 第一个对话框是实施showConfirmDialog ,使用这两个按钮的外观和感觉措辞。 第二个对话框使用showOptionDialog所以它可以自定义的措辞。 措辞变化异常,对话框是相同的。

是/否“对话框,在这些话,但也许是翻译]
 / /默认的图标,自定义标题
 INT ñ = JOptionPane.showConfirmDialog(
    帧,
     “你喜欢绿色的蛋和火腿吗?”
     “空洞的问题”,
     JOptionPane.YES_NO_OPTION);
是/否对话框 - 换句话说
对象[]选项= {“是的,请”
                     “没办法!”};
 INT N = JOptionPane.showOptionDialog(帧,
     “你喜欢绿色的蛋和火腿吗?”
     “一个愚蠢的问题”,
     JOptionPane.YES_NO_OPTION,
     JOptionPane.QUESTION_MESSAGE,
     NULL,/ /不使用自定义图标
    选项​​,/ /标题的按钮
    选项​​[0]); / /默认按钮标题

正如前面的代码片段显示, showMessageDialog , showConfirmDialog ,并showOptionDialog方法返回一个整数,指示用户的选择。 这个整数的值YES_OPTION , NO_OPTION , CANCEL_OPTION , OK_OPTIONCLOSED_OPTION。 除CLOSED_OPTION ,每个选项对应于用户按下按钮。 返回CLOSED_OPTION时,它表示,用户关闭对话窗口明确,选择里面的选项窗格中的一个按钮,而不是。

即使你改变标准对话框按钮显示的字符串,返回值仍然是一个预先定义的整数。 例如,一个YES_NO_OPTION对话框总是返回下列值之一: YES_OPTION , NO_OPTION ,或CLOSED_OPTION 。

从对话框获取用户输入的

show Xxx Dialog showInputDialog的唯一形式Object show Xxx Dialog ,不返回一个整数,它返回一个Object而不是。 这个Object通常是一个String ,它反映了用户的选择。 下面是使用的showInputDialog showInputDialog创建一个对话框,让用户选择三个字符串之一:

一个组合框的输入对话框
 Object []对象的可能性= {“火腿”,“垃圾邮件”,“山药”};
字符串S =(字符串)JOptionPane.showInputDialog(
                    帧,
                     “完成句子:\ N”
                     +“\”绿色鸡蛋... ... \“”,
                     “定制对话框”,
                     JOptionPane.PLAIN_MESSAGE,
                    图标,
                    的可能性,
                     “火腿”);

 / /如果返回了一个字符串,这样说。
 ((S = NULL)&&(s.length()> 0)){
     setLabel(“绿鸡蛋和... ...”+ S + "!");
    回报;
 }

 / /如果你在这里,返回值是空/空。
 setLabel(“来吧,说完这句话!”);

,如果你不小心限制用户的选择,你可以使用的showInputDialog showInputDialog方法,花费更少的参数null指定为null的对象数组。 在Java的外观和感觉,而代以null possibilities结果在一个对话框,有一个文本字段,看起来像这样:

与文本字段输入对话框

因为用户可以在文本字段中键入任何东西,你可能要检查返回值,并要求用户再次尝试,如果它是无效的的。 另一种方法是创建一个自定义对话框中验证用户输入的数据,它返回之前。 参见CustomDialog.java验证数据的一个例子。

如果你正在设计一个自定义对话框,你需要设计你的对话框的API,让你可以查询哪些用户选择对话框。 例如, CustomDialoggetValidatedText的方法,返回用户输入的文本。

停止自动对话闭幕

默认情况下,当用户点击一个JOptionPane创建按钮,关闭对话框。 但如果你想关闭对话框前检查用户的答案? 在这种情况下,您必须实现自己的属性更改侦听器,这样,当用户点击一个按钮,对话框不会自动关闭。

DialogDemo包含两个对话框实现属性更改侦听。 这些对话框之一,是一个自定义模式对话框,在CustomDialogCustomDialog, JOptionPane JOptionPane得到的标准图标和布局援助。 其他对话,其代码如下,使用一个标准是/否JOptionPane 。 虽然这个对话框是相当无用的书面的,它的代码是很简单的,您可以使用它作为一个更复杂的对话框的模板。

除了 ​​设置的属性更改侦听,下面的代码也调用JDialogsetDefaultCloseOperation方法,并实现了一个窗口监听器,正确处理窗口关闭尝试。 如果你不介意当用户关闭窗口明确通知,然后忽略了大胆的代码。

最后JOptionPane optionPane =新JOptionPane(
                 “只有这样,才能关闭这个对话框是\ N”
                 “按下面的按钮之一。\ N”
                 “你懂吗?”
                 JOptionPane.QUESTION_MESSAGE,
                 JOptionPane.YES_NO_OPTION);

最后的JDialog对话框=新的JDialog(帧, 
                              “按一下按钮”,
                              TRUE);
 dialog.setContentPane(optionPane);
 dialog.setDefaultCloseOperation( 
      JDialog.DO_NOTHING_ON_CLOSE); 
  dialog.addWindowListener(新WindowAdapter(){ 
      公共无效windowClosing(WindowEvent我们){ 
          setLabel(“挫败用户试图关闭窗口”); 
      } 
  });
 optionPane.addPropertyChangeListener(
    新的PropertyChangeListener(){
        公共无效的propertyChange(PropertyChangeEvent E){
            弦乐托= e.getPropertyName();

            如果(dialog.isVisible() 
              &&(e.getSource()== optionPane)
              &&(prop.equals(JOptionPane.VALUE_PROPERTY))){
                 / /如果你要检查的东西
                 / /关闭窗口之前,你会怎么做
                 / /这里。
                 dialog.setVisible(假);
             }
         }
     });
 dialog.pack();
 dialog.setVisible(TRUE);

 int值=((Integer)的optionPane.getValue())intValue();
 (值== JOptionPane.YES_OPTION){
     setLabel(“好。”);
代码} else if(值== JOptionPane.NO_OPTION){
     setLabel(“尝试使用窗口装饰”
              +“关闭非自动关闭对话框。”
              +“你不能!”);
 }

对话框API

下表列出了常用JOptionPane JOptionPane JDialog JDialog的构造器和方法。 你很可能会调用的其他方法Dialog Window窗口Component类, packsetSize setSize setVisible setVisible 。

API是列如下:

显示标准模态对话框(使用JOptionPane类方法)
方法目的
静态无效showMessageDialog(组件对象) 
静态无效showMessageDialog(组件,对象,字符串,INT) 
静态无效showMessageDialog(组件,对象,字符串,INT,图标)
显示一个按钮,模态对话框,为用户提供一些信息。 (按顺序)参数指定父组件的消息,标题,消息类型,对话框的图标。 请参阅创建和显示简单的对话框参数及其影响的讨论。
静态INT showOptionDialog(组件,对象,字符串,INT,INT,图标,对象[]对象)显示一个定制的模态对话框。 (按顺序)参数指定父组件的消息,标题,选项类型,消息类型,图标,选项和对话框的初始值。 请参阅创建和显示简单的对话框参数及其影响的讨论。
静态INT showConfirmDialog(组件对象) 
静态诠释showConfirmDialog(组件,对象,字符串,INT) 
静态诠释showConfirmDialog(组件,对象,字符串,INT,INT) 
静态诠释showConfirmDialog组件,对象,字符串,INT,INT(图标)
显示一个模态对话框,要求用户的问题。 (按顺序)参数指定父组件的消息,标题,选项类型,消息类型,对话框的图标。 请参阅创建和显示简单的对话框参数及其影响的讨论。
静态字符串showInputDialog(对象) 
静态字符串showInputDialog(组件对象) 
静态字符串showInputDialog(组件,对象,字符串,INT) 
静态字符串showInputDialog(组件,对象,字符串,整数,图标,对象[]对象)
显示一个模式对话框,提示用户输入。 单参数版本指定的消息,与假设为null父组件。 其他版本的参数指定(按顺序)对话框的父组件,消息,标题,消息类型,图标,选项,和初始值。 请参阅创建和显示简单的对话框参数及其影响的讨论。
静态无效showInternalMessageDialog (...) 
静态无效showInternalOptionDialog (...) 
静态无效showInternalConfirmDialog (...) 
静态字符串showInternalInputDialog (...)
作为内部框架实现一个标准对话框。 见的JOptionPane的API文档的参数的确切名单。
使用JOptionPane直接的方法
方法或构造目的
JOptionPane() 
JOptionPane(对象) 
JOptionPane(对象,INT) 
JOptionPane(对象,INT,INT) 
JOptionPane(对象,INT,INT,图标) 
JOptionPane(对象,INT,INT,图标,对象[]) 
JOptionPane(对象,INT,INT,图标,对象,对象)
创建一个JOptionPane实例。 请参阅创建和显示简单的对话框参数及其影响的讨论。
静帧getFrameForComponent(组件)
静态JDesktopPane getDesktopPaneForComponent(组件)
手持JOptionPane类的方法, 找到或桌面窗格中,分别指定组件英寸
INT getMaxCharactersPerLineCount()确定换行会自动插入选项窗格中的文本。 (默认值是Integer.MAX_VALUE 。)要使用此方法,你必须创建一个JOptionPane子类。 例如,下面的代码在同一个字,每行的选项窗格中,由于字符串中的每个字是5个字符或更少的事实结果:
 JOptionPane OP =新JOptionPane(“这是文本。”){
    公共INT getMaxCharactersPerLineCount(){
        返回5;
     }
 };

常用JDialog构造器和方法
方法或构造目的
的JDialog() 
的JDialog(对话) 
的JDialog(DIALOG,布尔) 
的JDialog(对话框,字串) 
的JDialog(对话框,字符串,布尔) 
的JDialog(对话框,字符串,布尔,GraphicsConfiguration的) 
的JDialog(帧) 
的JDialog(帧,布尔) 
的JDialog(帧,弦乐) 
的JDialog(帧,字符串,布尔) 
的JDialog(FRAME,字符串,布尔,GraphicsConfiguration的) 
的JDialog(Window所有者) 
的JDialog(窗口所有者,Dialog.ModalityType modalityType)
的JDialog(窗口所有者,弦乐标题) 
的JDialog(窗口所有者,弦乐标题,Dialog.ModalityType modalityType)
的JDialog(Window所有者,弦乐标题,Dialog.ModalityType modalityType,GraphicsConfiguration的GC)
创建JDialog JDialog实例。 Frame参数,如果有的话,该对话框取决于帧(通常是一个JFrame对象)。 布尔参数指定一个模态对话框, true false或不存在指定一个非模态对话框。 您也可以指定对话框的标题,用一个字符串参数。
无效setContentPane(集装箱) 
集装箱getContentPane()
获取和设置内容窗格中,这通常是所有对话框的组件的容器。 更多信息,请参阅使用顶层容器 。
无效setDefaultCloseOperation(INT) 
INT getDefaultCloseOperation()
获取和设置发生了什么,当用户试图关闭对话框。 可能的值:DISPOSE_ON_CLOSE , DO_NOTHING_ON_CLOSE , HIDE_ON_CLOSE (默认)。 响应窗口闭幕式更多信息,请参阅。
无效setLocationRelativeTo(组件)中心在指定的组件的对话框。
静态无效setDefaultLookAndFeelDecorated(布尔) 
静态布尔isDefaultLookAndFeelDecorated()
设置或获取一个对话框的窗口装饰(如边界或部件关闭窗口)是否应提供由当前外观和感觉的暗示。 否则对话框的装饰将提供当前窗口管理器。 更多信息,请参阅指定窗口装饰 。

使用对话框的例子

此表列出了使用JOptionPane JDialog的例子, 。 为了找到使用对话框中的其他例子,看到的例子列出进度,颜色选择和文件挑肥拣瘦。

范例凡形容注释
DialogDemo, 
CustomDialog
本节建立多种对话,使用JOptionPane JDialog JDialog 。
Framework-弹出一个确认对话框,当用户选择退出菜单项。
ListDialog如何使用BoxLayout实现一个模态对话框,其中包含一个滚动列表和两个按钮。 不使用JOptionPane,除getFrameForComponent的实用方法。

出自:http://translate.googleusercontent.com/translate_c?hl=zh-CN&langpair=en%7Czh-CN&rurl=translate.google.com.hk&u=http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html&usg=ALkJrhi20pGv8qzuBD7b9DS8cpehybcxoQ

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值