Java学习day082 Swing用户界面组件(七:对话框)(选项对话框、

 2024-02-04 03:01:35  阅读 0

使用的教材是《Java核心技术卷1》,我会按照这本书的章节,利用视频资源来学习基础的Java知识。

Swing用户界面组件(7:对话框)(选项对话框、创建对话框、数据交换、文件对话框、颜色选择器)

到目前为止,所有用户界面组件都已显示在应用程序创建的框架窗口中。 在编写在 Web 浏览器中运行的代码时,这是一种非常常见的情况。 但是,如果编写应用程序,通常需要弹出单独的对话框来显示信息或获取用户信息。 与大多数窗口系统一样,AWT也分为模式对话框和非模式对话框。 在处理完成之前,模式对话框不允许用户与应用程序的其余窗口进行交互。 模式对话框主要用于在程序继续运行之前获取用户提供的信息。 例如,当用户想要读取文件时,会弹出一个模式对话框。 在程序开始读取操作之前,用户必须给出文件名。 在用户关闭(模式)对话框之前,应用程序无法继续执行。 所谓无模式对话框是指允许用户同时在对话框和应用程序的其他窗口中输入信息。 使用无模式对话框的最佳示例是工具栏。 工具栏可以停靠在任何地方,用户可以在需要时同时与应用程序窗口和工具栏进行交互。

1. 选项对话框

Swing 有一组简单的对话框,用于从用户那里获取一些简单的信息。 有 4 个静态方法用于显示这些对话框:

::::显示一条消息并等待用户单击“确定” 显示一条消息并等待用户确认(类似于“确定/类似”) 显示一条消息并从一组选项中获取用户的选择 显示一条消息并获取一行用户输入的文本。

图中显示了一个典型的对话框。如您所见,该对话框具有以下组件: • 图标 • 一条消息 • 一个或多个按钮

输入对话框有一个附加组件用于接收用户输入。 它可以是用于输入任何字符串的文本字段,也可以是允许用户从中进行选择的组合框。 这些对话框的确切布局以及为标准消息类型选择的图标取决于具体的外观和感觉。左侧的图标将由以下 5 种消息类型决定

ERROR_MESSAGE
INFORMATION_MESSAGE
WARNINC_MESSAGE
QUESTION_MESSAGE
PLAIN_MESSAGE

类型没有图标。 每种对话框类型都有一种方法,可用于提供自己的图标来代替原始图标。 可以为每种对话框类型指定一条消息。 这里的消息可以是字符串、图标、用户界面组件或其他类型的对象。 下面是显示消息对象的基本方法: :Icon:[]: 绘制一个字符串来显示图标。 显示组件显示数组中按顺序堆叠的所有对象以及任何其他对象:调用该方法以显示结果字符串。

当然,提供字符串消息是最常见的情况,并且提供字符串消息可以提供更大的灵活性。 这是因为你可以通过调用方法来绘制任何你想要的东西。 底部的按钮取决于对话框类型和选项类型。 当调用 和 时,只有一组标准按钮(分别是“确定”/)可见。 调用时,可以选择以下四种选项类型之一:

可以使用它指定任何选项。 这里您需要为选项提供一个对象数组。 每个数组元素可以是以下类型之一:

:使用字符串标签创建按钮 图标:使用图标创建按钮:显示该组件

其他类型的对象:使用该方法,然后使用生成的字符串作为标签创建一个按钮。 并返回一个整数,表示用户选择了哪个按钮。 对于选项对话框,该值是所选选项的索引值或者(此时,用户没有选择可选选项,而是关闭了对话框)。

这些选项可能看起来很混乱,但实际上非常简单:

1) 选择对话框的类型(消息、确认、选项或输入)。

2) 选择图标(错误、信息、警告、问题、无或自定义)。

3) 选择消息(字符串、图表、自定义组件或其集合)。

4) 对于确认对话框,选择选项类型(默认、是/否、是/否/或确定/)。

5) 对于“选项”对话框,选择选项(字符串、图表或自定义组件)和默认选项。

6) 对于输入对话框,选择文本框或组合框。

7) 调用相应的方法。

2. 创建对话框

要实现对话框,您需要从 派生一个类。 这与应用程序窗口的派生过程完全相同。 具体流程如下:

1) 在对话框构造函数中,调用超类的构造函数。

2) 添加对话框的用户界面组件。

3) 添加事件处理程序。

4) 设置对话框的大小。

调用超类构造函数时,需要提供所有者框架()、对话框标题和模式特征。

所有者框架控制对话框的显示位置。 如果所有者设置为 null,则该对话框将由隐藏框架拥有。

模式特征指定在显示对话框时应用程序中的其他窗口是否被锁定。 非模式对话框不锁定其他窗口,而模式对话框则锁定应用程序中的所有其他窗口(对话框的子窗口除外)。 用户经常使用的工具栏是非模式对话框。 另一方面,如果您想强制用户在继续之前提供一些必要的信息,则应该使用模式对话框。

下面是一个对话框的示例:

public AboutDialog extends JDialog
{
    public AboutDialog(JFrame owner)
    {
        super(owner, "About DialogTest", true);
        add(new]Label(
            "Core]avaBy Cay Horstmann"),
                BorderLayout.CENTER);
        JPanel panel = new JFanel();
        JButton ok = new JButton("OK");
        ok.addActionListener(event-> setVisible(false));    
        panel .add(ok);
        add(panel , BorderLayout.SOUTH);
        setSize(250, 150);
    }
}

正如您所看到的,构造函数添加了用户界面组件(在本例中为标签和按钮),为按钮设置了处理程序,然后还设置了对话框的大小。 要显示对话框,您需要创建一个新的对话框对象并使其可见:

= 新的(这个);

。(真的);

事实上,在下面的示例代码中,对话框仅创建一次,并且可以在用户单击“关于”按钮时重复使用。

if(==null)//第一次

=新(这个);

。(真的);

当用户单击“确定”按钮时,该对话框将关闭。 以下是确定按钮的事件处理程序中的处理代码:

好的。(事件->(假));

当用户单击“关闭”按钮关闭该对话框时,该对话框将被隐藏。 与 - 一样,可以重写tion 方法来更改此行为。

3.数据交换

使用对话框最常见的目的是获取用户输入。 正如我们之前所看到的,构造一个对话框对象非常简单:首先初始化数据,然后调用(tme)在屏幕上显示对话框。 现在,让我们看看如何在对话框之间传输数据。

如图所示的对话框可用于获取用户名和用户密码,以便连接到某些在线服务。

该对话框应提供设置默认数据的方法。 例如,示例程序中的类提供了将默认值放入以下字段的方法:

public void setUser(User u)
{
    username.setText(u_getName());
}

一旦设置了默认值(如果需要),您可以调用(true)让对话框出现在屏幕上。

然后用户输入信息并单击“确定”或“ ”按钮。 两个按钮的事件处理程序将调用 (false) 终止对 (true) 的调用。 或者,用户可以选择关闭该对话框。 如果没有为对话框安装窗口侦听器,则执行默认的窗口结束操作,即对话框变得不可见,这也会中止对 (true) 的调用。

重要的问题是,在用户关闭此对话框之前,始终会调用(真正的)阻止。 这使得模态对话框的实现变得容易。 想知道用户是接受对话框还是取消对话框。

OK 标志已设置,并且在显示对话框之前为 false。 只有“确定”按钮的事件处理程序才能将其设置为 true。 这样就可以获取用户在对话框中的输入。

4. 文件对话框

编写应用程序时,您通常希望能够打开和保存文件。 一个好的文件对话框应该能够显示文件和目录并允许用户浏览文件系统,这是编写起来比较困难的。 人们肯定不想从头开始。 幸运的是,Swing 提供了可以显示文件对话框的类,该对话框看起来与本机应用程序中使用的文件对话框基本相同。 是一个模式对话框。 请注意,类不是类的子类。 需要调用,而不是调用(true)显示打开文件的对话框,或者调用显示保存文件的对话框。 接受文件的按钮会自动标记为“打开”或“保存”。 您还可以调用方法来设置按钮的标签。 该图是文件选择对话框的示例。

以下是创建文件对话框并获取用户选择信息的步骤:

1)创建一个对象。 与类的构造函数不同,它不需要指定父组件。 允许在多个框架中重复使用文件选择器。 例如:=new();

2) 调用该方法设置当前目录。 例如,使用当前工作目录:

。(新文件(”。”));

需要提供一个 File 对象。 这里只需要知道构造函数File()可以将文件或目录名转换为File对象。

3) 如果您想要选择默认文件名作为用户的选择,您可以使用以下方法指定它:

。(新文件());

4)如果对话框中允许用户选择多个文件,则需要调用bled方法。 当然,这是可选的。

.bleed(true);

5) 如果希望对话框只显示某一种类型的文件(例如所有扩展名为.gif的文件),则需要设置文件过滤器。

6) 默认情况下,用户只能在文件选择器中选择文件。 如果要选择目录,则需要调用该方法。 参数值为:.(默认值)、.或.S。

7) 调用 或 方法来显示对话框。 必须为这些调用提供父组件:

int =.():或 int =.();

这些调用之间的区别在于“确认按钮”的标记不同。 单击“确认按钮”将完成文件选择。 您还可以调用该方法并将显式文本传递给确认按钮:

int =.(,"");

仅当用户确认、取消或离开对话框时才会返回该调用。 返回值可以是 .—、. 或 .ERROR—。

8) 调用()或()方法获取用户选择的一个或多个文件。 这些方法将返回一个文件对象或一组文件对象。 如果需要知道文件对象名称,可以调用该方法。 例如:

=.().();

在大多数情况下,这些过程都相对简单。 使用文件对话框的主要困难是指定用户需要选择的文件子集。 例如,假设用户应选择 GIF 图像文件。 后续文件选择器应仅显示扩展名为 .gif 的文件,并且还应向用户提供反馈,指示正在显示的特定文件类别,例如“GIF 图像”。 然而,情况可能更加复杂。 如果用户选择 JPFG 图像文件,则扩展名可以是 .jpg 或 jpeg。 文件选择器的设计者没有重新编码这种复杂的情况,而是提供了一种更好的机制:如果要限制显示的文件,则需要创建一个实现抽象类 jaVax.swing 的对象。文件选择器通过每个文件添加到文件过滤器,最终只显示文件过滤器接受的文件。 有两个子类可用:默认过滤器(接受所有文件)和过滤器(接受具有给定扩展名的所有文件)。 其实设计一个专门的文件过滤器非常简单,只要在超类中实现两个方法即可:

(文件f);

();

第一个方法检测是否应接受文件,第二个方法返回文件选择器对话框中显示的文件类型的描述。

获得文件过滤器对象后,您可以通过调用类中的方法将此对象安装到文件选择器对象中:

.(new ter("图像文件","gif","jpg"));

可以为文件选择器安装多个过滤器:

.er():

.er();

用户可以从文件对话框底部的组合框中选择过滤器。 默认情况下,过滤器始终显示在组合框中。 这是一个非常好的主意,特别是如果该程序的用户需要选择具有非标准扩展名的文件。 但是,如果您想禁用过滤器,请调用:

.r已使用(假)

最后,可以通过为文件选择器显示的每个文件提供特定的图标和文件描述来自定义文件选择器。 这需要使用扩展 javax.swing 中的类的对象。 包裹。 这是一项先进的技术。 在正常情况下,不需要提供文件视图——可插入的外观和感觉就可以。 但是,如果您希望特定文件类型显示不同的图标,则需要安装您自己的文件视图。 这涉及扩展和实现以下 5 种方法:

图标(文件f);

(文件f);

(文件f);

(Fi1ef);

(文件f);

然后,调用该方法将文件视图安装到文件选择器中。 文件选择器为它希望显示的每个文件或目录调用这些方法。 如果该方法返回的图标、名称或描述为空,则文件选择器将为当前外观构造默认文件视图。 这很有效,因为您只需处理具有不同显示的文件类型。

文件选择器调用方法来确定当用户单击某个目录时是否打开该目录。 请注意,此方法返回一个对象,而不是值。 这看起来可能有点奇怪,但实际上非常方便——如果您需要使用默认视图,则返回 null。 文件选择器将使用默认文件视图。 换句话说,该方法返回的对象可以给出以下三种选择:真(.TRUE)、假(.FALSE)和不关心(null)。

5. 颜色选择器

高质量的文件选择器是一个复杂的用户界面组件,人们不愿意自己编写。 许多用户界面工具包还提供额外的常用对话框:选择日期/时间、货币值、字体、颜色等。这将带来两个好处:程序员可以直接使用这些高质量的代码,而不必从头开始,并且用户可以使用组件获得一致的体验。 除了文件选择器之外,Swing还提供了选择器--(如图)。 您可以使用此选择器来选择颜色。 同样,颜色选择器也是一个组件,而不是对话框,但它包含用于创建包含颜色选择器组件的 方法的工具。

以下代码说明了如何使用颜色选择器显示模式对话框:

颜色=.(,标题,);

或者,可以通过提供以下内容来显示无模式颜色选择器对话框:

•父组件。

•对话框的标题。

• 用于选择模态/非模态对话框的标记。

•选色器。

• 0K 和按钮侦听器(如果不需要侦听器,可以设置为 null)。

以下代码将创建一个非模式对话框。 当用户按确定键时,对话框的背景颜色设置为所选颜色。

chooser = new JColorChooser();
dialog =JColorChooser.createDialog(
parent,
"Background Color",
false /*not modal*/»
chooser,
event->setBackground(chooser.getColor()),
null /*no Cancel button listener*/);

标签: 对话 调用 组件

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码