Java 中文官方教程 2022 版(十九)(4)

简介: Java 中文官方教程 2022 版(十九)

Java 中文官方教程 2022 版(十九)(3)https://developer.aliyun.com/article/1486746

使用 getResource 加载图像

大多数情况下,图像图标的数据来自图像文件。您的应用程序的类文件和图像文件可能以多种有效方式配置在文件服务器上。您可能将类文件放在一个 JAR 文件中,或者将图像文件放在一个 JAR 文件中;它们可能在同一个 JAR 文件中,也可能在不同的 JAR 文件中。以下图示说明了这些文件可以配置的几种方式:

如果你正在编写真实世界的应用程序,很可能(也建议)将文件放入包中。有关包的更多信息,请参阅创建和使用包中的学习 Java 语言教程。以下是使用名为"omega"的包的一些可能配置:

所有七种配置都是有效的,相同的代码读取图片:

java.net.URL imageURL = myDemo.class.getResource("images/myImage.gif");
...
if (imageURL != null) {
    ImageIcon icon = new ImageIcon(imageURL);
}

getResource方法会导致类加载器在程序的类路径中查找目标文件,一旦找到所需文件就会返回一个 URL。在这个例子中,MyDemo 程序尝试从omega类加载images/myImage.png文件。类加载器会在程序的类路径中查找/omega/images/myImage.png。如果类加载器找到了文件,就会返回包含该文件的 JAR 文件或目录的 URL。如果类路径中的另一个 JAR 文件或目录包含images/myImage.png文件,类加载器会返回第一个包含该文件的实例。

有三种指定类路径的方式:

  • 使用-cp-classpath命令行参数。例如,在图片存储在名为images.jar的 JAR 文件中,而类文件在当前目录的情况下:
java -cp  .;images.jar  MyDemo  [Microsoft Windows]
java -cp ".;images.jar" MyDemo  [UNIX-emulating shell on Microsoft
                                Windows — you must quote the path]
java -cp  .:images.jar  MyDemo  [UNIX]
  • 如果你的图片和类文件存储在不同的 JAR 文件中,你的命令行会类似于:
java -cp .;MyDemo.jar;images.jar MyDemo  [Microsoft Windows]
  • 在所有文件都在一个 JAR 文件中的情况下,你可以使用以下任一命令:
java -jar MyAppPlusImages.jar
java -cp .;MyAppPlusImages.jar MyApp  [Microsoft Windows]
  • 欲了解更多信息,请参阅 JAR 文件教程。
  • 在程序的 JNLP 文件中(Java Web Start 使用)。例如,这是DragPictureDemo使用的 JNLP 文件:
<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File for DragPictureDemo -->
<jnlp
  spec="1.0+"
  codebase="https://docs.oracle.com/javase/tutorialJWS/src/uiswing/misc/examples"
  href="DragPictureDemo.jnlp">
  <information>
    <title>DragPictureDemo</title>
    <vendor>The Java(tm) Tutorial: Sun Microsystems, Inc.</vendor>
    <homepage href="https://docs.oracle.com/javase/tutorial/uiswing/misc/examples/index.html#DragPictureDemo"/>
    <description>DragPictureDemo</description>
    <description kind="short">A demo showing how to install
        data transfer on a custom component.</description>
    <offline-allowed/>
  </information>
  <resources>
    <j2se version="1.6+"/>
    <jar href="allClasses.jar"/>
    <jar href="images.jar"/>
  </resources>
  <application-desc main-class="DragPictureDemo"/>
</jnlp>
  • 在这个例子中,类文件和图片文件分别存储在不同的 JAR 文件中。使用 XML jar标签指定 JAR 文件。
  • 设置CLASSPATH环境变量。这种方法不推荐。如果未设置CLASSPATH,则默认使用当前目录(“.”),然后是随 JRE 一起提供的系统类的位置。

大多数 Swing 教程示例将图像放在包含示例类文件的目录下的images目录中。当为示例创建 JAR 文件时,我们保持相同的相对位置,尽管通常我们将类文件放在与图像 JAR 文件不同的 JAR 文件中。无论类文件和图像文件在文件系统中的位置如何 — 在一个 JAR 文件中,或在多个 JAR 文件中,在命名包中,或在默认包中 — 相同的代码使用getResource查找图像文件。

欲了解更多信息,请参阅以位置无关的方式访问资源应用程序开发注意事项

将图像加载到 Applets 中

Applets 通常从提供 applet 的计算机加载图像数据。APPLET标签是您指定 applet 中使用的图像信息的地方。有关APPLET标签的更多信息,请参阅使用 APPLET 标签。

在加载图像图标时改善感知性能

由于访问照片图像可能很慢,IconDemoApp.java使用SwingWorker来改善用户感知的程序性能。

后台图像加载 — 该程序使用javax.swing.SwingWorker对象在后台线程中加载每张照片图像并计算其缩略图。使用SwingWorker可以防止程序在加载和缩放图像时出现冻结的情况。

这是处理每个图像的代码:

/**
 * SwingWorker class that loads the images a background thread and calls publish
 * when a new one is ready to be displayed.
 *
 * We use Void as the first SwingWorker param as we do not need to return
 * anything from doInBackground().
 */
private SwingWorker<Void, ThumbnailAction> loadimages = new SwingWorker<Void, ThumbnailAction>() {
    /**
     * Creates full size and thumbnail versions of the target image files.
     */
    @Override
    protected Void doInBackground() throws Exception {
        for (int i = 0; i < imageCaptions.length; i++) {
            ImageIcon icon;
            icon = createImageIcon(imagedir + imageFileNames[i], imageCaptions[i]);
            ThumbnailAction thumbAction;
            if(icon != null){
                ImageIcon thumbnailIcon = new
                     ImageIcon(getScaledImage(icon.getImage(), 32, 32));
                thumbAction = new ThumbnailAction(icon, thumbnailIcon, imageCaptions[i]);
            } else {
                // the image failed to load for some reason
                // so load a placeholder instead
                thumbAction = new ThumbnailAction(placeholderIcon, placeholderIcon, imageCaptions[i]);
            }
            publish(thumbAction);
        }
        // unfortunately we must return something, and only null is valid to
        // return when the return type is void.
        return null;
    }
    /**
     * Process all loaded images.
     */
    @Override
    protected void process(List<ThumbnailAction> chunks) {
        for (ThumbnailAction thumbAction : chunks) {
            JButton thumbButton = new JButton(thumbAction);
            // add the new button BEFORE the last glue
            // this centers the buttons in the toolbar
            buttonBar.add(thumbButton, buttonBar.getComponentCount() - 1);
        }
    }
};

SwingWorker 在后台线程中调用doInBackground方法。该方法将全尺寸图像、缩略图图像和标题放入ThumbnailAction对象中。然后,SwingWorker 将ThumbnailAction传递给process方法。process方法在事件分发线程上执行,并通过向工具栏添加按钮来更新 GUI。JButton有一个接受动作对象的构造函数。动作对象确定按钮的许多属性。在我们的情况下,按钮图标、标题和按下按钮时执行的操作都由ThumbnailAction确定。

开销 — 该程序最终将所有源图像加载到内存中。这在所有情况下可能并不理想。加载大量非常大的文件可能会导致程序分配大量内存。应注意管理加载的图像数量和大小。

与所有与性能相关的问题一样,这种技术在某些情况下适用,而在其他情况下则不适用。此外,这里描述的技术旨在改善程序的感知性能,但不一定影响其实际性能。

创建自定义图标实现

createImageIcon方法无法找到图像时会返回 null,但程序应该怎么做呢?一种可能性是忽略该图像并继续。另一个选择是在无法加载真实图像时提供某种默认图标来显示。再次调用createImageIcon可能会导致另一个 null,因此使用它不是一个好主意。相反,让我们创建一个自定义Icon实现。


您可以在MissingIcon.java中找到自定义图标类的实现。以下是其代码中的有趣部分:

/**
 * The "missing icon" is a white box with a black border and a red x.
 * It's used to display something when there are issues loading an
 * icon from an external location.
 *
 * @author Collin Fagan
 */
public class MissingIcon implements Icon{
    private int width = 32;
    private int height = 32;
    private BasicStroke stroke = new BasicStroke(4);
    public void paintIcon(Component c, Graphics g, int x, int y) {
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.setColor(Color.WHITE);
        g2d.fillRect(x +1 ,y + 1,width -2 ,height -2);
        g2d.setColor(Color.BLACK);
        g2d.drawRect(x +1 ,y + 1,width -2 ,height -2);
        g2d.setColor(Color.RED);
        g2d.setStroke(stroke);
        g2d.drawLine(x +10, y + 10, x + width -10, y + height -10);
        g2d.drawLine(x +10, y + height -10, x + width -10, y + 10);
        g2d.dispose();
    }
    public int getIconWidth() {
        return width;
    }
    public int getIconHeight() {
        return height;
    }
}

paintIcon方法接收一个Graphics对象。Graphics对象使paintIcon方法可以访问整个 Java2D API。有关绘图和 Java2D 的更多信息,请参见执行自定义绘图。

以下代码演示了MissingIcon类在SwingWorkerdoInBackground方法中的使用。

private MissingIcon placeholderIcon = new MissingIcon();
...
if(icon != null) {
    ...
} else {
    // the image failed to load for some reason
    // so load a placeholder instead
    thumbAction = new ThumbnailAction(placeholderIcon, placeholderIcon, imageCaptions[i]);
}

使用自定义图标会有一些影响:

  • 因为图标的外观是动态确定的,图标绘制代码可以使用任何信息 — 例如组件和应用程序状态 — 来确定要绘制什么。
  • 根据平台和图像类型,使用自定义图标可能会提高性能,因为绘制简单形状有时比复制图像更快。
  • 因为MissingIcon不执行任何文件 I/O,所以不需要单独的线程来加载图像。

图像图标 API

以下表格列出了常用的ImageIcon构造函数和方法。请注意,ImageIcon不是JComponent甚至不是Component的子类。

使用图像图标的 API 分为以下几类:

  • 设置、获取和绘制图像图标的图像
  • 设置或获取有关图像图标的信息
  • 观察图像图标的图像加载状态

设置、获取和绘制图像图标的图像

方法或构造函数 目的

| ImageIcon() ImageIcon(byte[]) |

ImageIcon(byte[], String)

ImageIcon(Image)

ImageIcon(Image, String)

ImageIcon(String)

ImageIcon(String, String)

ImageIcon(URL)

ImageIcon(URL, String) | 创建一个ImageIcon实例,并初始化为包含指定图像。第一个参数指示源——图像、字节数组、文件名或 URL——从中应加载图像图标的图像。源必须是java.awt.Image类支持的格式:即 GIF、JPEG 或 PNG。第二个参数(如果存在)为图像提供描述。描述也可以通过setDescription设置,并为辅助技术提供有用的文本信息。 |

void setImage(Image) Image getImage() 设置或获取图像图标显示的图像。
void paintIcon(Component, Graphics, int, int) 在指定的图形上下文中绘制图像图标的图像。只有在实现执行自己的绘图的自定义图标时才会覆盖此方法。Component对象用作图像观察者。您可以依赖Component类提供的默认行为,并传入任何组件。两个int参数指定绘制图标的左上角。
URL getResource(String) in (java.lang.ClassLoader) 查找具有给定名称的资源。有关更多信息,请参见使用 getResource 加载图像。
InputStream getResourceAsStream(String) in (java.lang.ClassLoader) 查找具有给定名称的资源,并返回用于读取资源的输入流。有关更多信息,请参见将图像加载到小程序中讨论。

设置或获取有关图像图标的信息

方法 目的
void setDescription(String) String getDescription() 设置或获取图像的描述。此描述供辅助技术使用。
int getIconWidth() int getIconHeight() 获取图像图标的宽度或高度(以像素为单位)。

观察图像图标的图像加载

方法 目的
void setImageObserver(ImageObserver) ImageObserver getImageObserver() 为图像图标设置或获取图像观察器。
int getImageLoadStatus() 获取图像图标的图像加载状态。此方法返回的值由MediaTracker定义。

使用图标的示例

以下表格列出了仅有的一些使用ImageIcon的示例。

示例 描述位置 注释
LabelDemo 本节和如何使用标签 演示如何在应用程序的标签中使用图标,带有或不带有相应文本。
IconDemo 本节 使用标签显示大图像;使用既有图像又有文本的按钮。
CustomIconDemo 本节 使用由ArrowIcon.java实现的自定义图标类。
TumbleItem 如何制作小程序 一个小程序。在动画中使用图像图标。展示如何调用ImageIconpaintIcon方法。
ButtonDemo 如何使用按钮、复选框和单选按钮 展示如何在应用程序的按钮中使用图标。
CheckBoxDemo 如何使用复选框 使用多个 GIF 图像。
TabbedPaneDemo 如何使用选项卡窗格 演示如何在选项卡窗格中添加图标到选项卡中。
DialogDemo 如何制作对话框 展示如何在对话框中使用标准图标。
TreeIconDemo 如何使用树 展示如何更改树节点显示的图标。
ActionDemo 如何使用操作 展示如何使用Action在工具栏按钮或菜单项中指定图标。
FileChooserDemo2 如何使用文件选择器 使用了 PNG 图像。展示了如何在文件选择器中实现图像预览和图像过滤器。

注意: IconDemo 中使用的照片版权归 ©2006 spriggs.net 所有,并在 知识共享许可协议 下授权使用。


如何使用边框

原文:docs.oracle.com/javase/tutorial/uiswing/components/border.html

每个JComponent可以有一个或多个边框。边框是非常有用的对象,虽然它们本身不是组件,但知道如何绘制 Swing 组件的边缘。边框不仅用于绘制线条和花哨的边缘,还用于为组件提供标题和周围的空白空间。


注意:

我们的示例在JPanelJLabelJComponent的自定义子类上设置了边框。尽管从技术上讲,您可以在任何继承自JComponent的对象上设置边框,但许多标准 Swing 组件的外观和感觉实现与用户设置的边框不兼容。通常情况下,当您想在除了JPanelJLabel之外的标准 Swing 组件上设置边框时,我们建议将组件放在JPanel中,并在JPanel上设置边框。


要在JComponent周围放置边框,可以使用其setBorder方法。您可以使用BorderFactory类来创建 Swing 提供的大多数边框。如果您需要引用边框,比如因为您想在多个组件中使用它,可以将其保存在Border类型的变量中。以下是创建带边框容器的代码示例:

JPanel pane = new JPanel();
pane.setBorder(BorderFactory.createLineBorder(Color.black));

这是一个包含标签组件的容器的图片。边框绘制的黑线标记了容器的边缘。


本页的其余部分讨论以下主题:

  • BorderDemo 示例
  • 使用 Swing 提供的边框
  • 创建自定义边框
  • 边框 API
  • 使用边框的示例

BorderDemo 示例

以下图片展示了一个名为BorderDemo的应用程序,显示了 Swing 提供的边框。稍后我们会展示创建这些边框的代码,在使用 Swing 提供的边框中。

单击启动按钮以使用Java™ Web Start运行 BorderDemo 示例(下载 JDK 7 或更高版本)。或者,要自行编译和运行示例,请参考示例索引。



下一张图片展示了一些镜面边框。创建镜面边框时,您需要指定组件顶部、左侧、底部和右侧各占据多少像素。然后,您需要指定镜面边框要绘制的颜色或图标。在选择图标和确定组件大小时需要小心;否则,图标可能会被截断或在组件的角落处不匹配。


下一张图片展示了带标题的边框。使用带标题的边框,您可以将任何边框转换为显示文本描述的边框。如果不指定边框,将使用特定外观的边框。例如,在 Java 外观中,默认的带标题边框使用灰色线条,在 Windows 外观中默认的带标题边框使用浮雕边框。默认情况下,标题横跨边框的左上角,如下图顶部所示。


下一张图片展示了复合边框。使用复合边框,您可以组合任意两个边框,这些边框本身可以是复合边框。


使用 Swing 提供的边框

接下来的代码展示了如何创建和设置前面图中看到的边框。您可以在BorderDemo.java中找到程序的代码。

//Keep references to the next few borders,
//for use in titles and compound borders.
Border blackline, raisedetched, loweredetched,
       raisedbevel, loweredbevel, empty;
blackline = BorderFactory.createLineBorder(Color.black);
raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
raisedbevel = BorderFactory.createRaisedBevelBorder();
loweredbevel = BorderFactory.createLoweredBevelBorder();
empty = BorderFactory.createEmptyBorder();
//Simple borders
jComp1.setBorder(blackline);
jComp2.setBorder(raisedbevel);
jComp3.setBorder(loweredbevel);
jComp4.setBorder(empty);
//Matte borders
ImageIcon icon = createImageIcon("images/wavy.gif",
                                 "wavy-line border icon"); //20x22
jComp5.setBorder(BorderFactory.createMatteBorder(
                                   -1, -1, -1, -1, icon));
jComp6.setBorder(BorderFactory.createMatteBorder(
                                    1, 5, 1, 1, Color.red));
jComp7.setBorder(BorderFactory.createMatteBorder(
                                    0, 20, 0, 0, icon));
//Titled borders
TitledBorder title;
title = BorderFactory.createTitledBorder("title");
jComp8.setBorder(title);
title = BorderFactory.createTitledBorder(
                       blackline, "title");
title.setTitleJustification(TitledBorder.CENTER);
jComp9.setBorder(title);
title = BorderFactory.createTitledBorder(
                       loweredetched, "title");
title.setTitleJustification(TitledBorder.RIGHT);
jComp10.setBorder(title);
title = BorderFactory.createTitledBorder(
                       loweredbevel, "title");
title.setTitlePosition(TitledBorder.ABOVE_TOP);
jComp11.setBorder(title);
title = BorderFactory.createTitledBorder(
                       empty, "title");
title.setTitlePosition(TitledBorder.BOTTOM);
jComp12.setBorder(title);
//Compound borders
Border compound;
Border redline = BorderFactory.createLineBorder(Color.red);
//This creates a nice frame.
compound = BorderFactory.createCompoundBorder(
                          raisedbevel, loweredbevel);
jComp13.setBorder(compound);
//Add a red outline to the frame.
compound = BorderFactory.createCompoundBorder(
                          redline, compound);
jComp14.setBorder(compound);
//Add a title to the red-outlined frame.
compound = BorderFactory.createTitledBorder(
                          compound, "title",
                          TitledBorder.CENTER,
                          TitledBorder.BELOW_BOTTOM);
jComp15.setBorder(compound);

正如您可能注意到的,代码使用BorderFactory类来创建每个边框。BorderFactory类位于javax.swing包中,返回实现Border接口的对象。

Border接口及其 Swing 提供的实现位于javax.swing.border包中。通常情况下,您不需要直接使用边框包中的任何内容,除非在指定特定边框类的常量或引用Border类型时。

创建自定义边框

如果BorderFactory不能提供足够的控制来定义边框的形式,那么您可能需要直接使用边框包中的 API — 或者甚至定义自己的边框。除了包含Border接口外,边框包还包含实现您已经看到的边框的类:LineBorderEtchedBorderBevelBorderEmptyBorderMatteBorderTitledBorderCompoundBorder。边框包还包含一个名为SoftBevelBorder的类,它产生类似于BevelBorder但边缘更柔和的效果。

如果没有适合的 Swing 边框,您可以实现自己的边框。通常,您可以通过创建AbstractBorder类的子类来实现这一点。在您的子类中,您必须实现至少一个构造函数和以下两个方法:

  • paintBorder,其中包含绘制代码,JComponent执行以绘制边框。
  • getBorderInsets,指定边框需要绘制自身所需的空间量。

如果自定义边框有插入(通常会有插入),您需要重写AbstractBorder.getBorderInsets(Component c)AbstractBorder.getBorderInsets(Component c, Insets insets)来提供正确的插入。

有关实现边框的示例,请参阅javax.swing.border包中类的源代码。

边框 API

以下表格列出了常用的边框方法。使用边框的 API 分为两类:

  • 使用 BorderFactory 创建边框
  • 设置或获取组件的边框

使用 BorderFactory 创建边框

方法 目的
创建线边框(Color) 创建线边框(Color, int) 创建一个线边框。第一个参数是一个java.awt.Color对象,指定线的颜色。可选的第二个参数指定线的宽度(以像素为单位)。

| 创建浮雕边框() 创建浮雕边框(Color, Color)

创建浮雕边框(int)

创建浮雕边框(int, Color, Color) | 创建一个浮雕边框。可选的Color参数指定要使用的高亮和阴影颜色。带有int参数的方法允许将边框方法指定为EtchedBorder.RAISEDEtchedBorder.LOWERED。没有int参数的方法创建一个降低的浮雕边框。

创建降低斜角边框() 创建一个边框,使组件看起来比周围区域更低。
创建凸起斜角边框() 创建一个边框,使组件看起来比周围区域更高。

| 创建斜角边框(int, Color, Color)

创建斜角边框(int, Color, Color, Color, Color) | 创建一个凸起或凹陷的斜角边框,指定要使用的颜色。整数参数可以是BevelBorder.RAISEDBevelBorder.LOWERED。使用三个参数的构造函数,您可以指定高亮和阴影颜色。使用五个参数的构造函数,您按顺序指定外部高亮,内部高亮,外部阴影和内部阴影颜色。

Border createEmptyBorder() Border createEmptyBorder(int, int, int, int) 创建一个不可见的边框。如果不指定参数,则边框不占用空间,这在创建没有可见边界的标题边框时很有用。可选参数指定边框在组件顶部、左侧、底部和右侧(按顺序)占用的像素数。此方法可用于在组件周围放置空白空间。
MatteBorder createMatteBorder(int, int, int, int, Color) MatteBorder createMatteBorder(int, int, int, int, Icon) 创建一个亚光边框。整数参数指定边框在组件顶部、左侧、底部和右侧(按顺序)占用的像素数。颜色参数指定边框应填充其区域的颜色。图标参数指定边框应平铺其区域的图标。

| TitledBorder createTitledBorder(String) TitledBorder createTitledBorder(Border)

TitledBorder createTitledBorder(Border, String)

TitledBorder createTitledBorder(Border, String, int, int)

TitledBorder createTitledBorder(Border, String, int, int, Font)

TitledBorder createTitledBorder(Border, String, int, int, Font, Color) | 创建一个带标题的边框。字符串参数指定要显示的标题。可选的字体和颜色参数指定标题文本要使用的字体和颜色。边框参数指定应显示的边框以及标题。如果未指定边框,则使用特定于外观的默认边框。默认情况下,标题跨越其伴侣边框的顶部,并且左对齐。可选的整数参数按顺序指定标题的位置和对齐方式。TitledBorder定义了这些可能的位置:ABOVE_TOPTOP(默认),BELOW_TOPABOVE_BOTTOMBOTTOMBELOW_BOTTOM。您可以将对齐方式指定为LEADING(默认),CENTERTRAILING。在具有西方字母表的语言环境中,LEADING等同于LEFTTRAILING等同于RIGHT。 |

CompoundBorder createCompoundBorder(Border, Border) 将两个边框合并为一个。第一个参数指定外边框;第二个参数指定内边框。

设置或获取组件的边框

方法 目的
void setBorder(Border) Border getBorder() 设置或获取接收JComponent的边框。

| void setBorderPainted(boolean) boolean isBorderPainted()

(在AbstractButtonJMenuBarJPopupMenuJProgressBarJToolBar中) | 设置或获取组件的边框是否应显示。 |

使用边框的示例

本课程中的许多示例使用边框。以下表格列出了一些有趣的案例。

示例 描述位置 备注
BorderDemo 本节 展示BorderFactory可以创建的每种边框类型的示例。还使用空边框在每个窗格及其内容之间添加间距。
BoxAlignmentDemo 如何使用 BoxLayout 使用带标题的边框。
BoxLayoutDemo 如何使用 BoxLayout 使用红线显示容器的边缘位置,以便您可以看到 BoxLayout 中额外空间是如何分配的。
ComboBoxDemo2 如何使用组合框 使用复合边框将线边框与空边框结合在一起。空边框在线和组件内部之间提供空间。


相关文章
|
9天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
【4月更文挑战第21天】本文介绍了Selenium中处理特殊测试场景的方法,如鼠标悬停。Selenium的Actions类提供了鼠标悬停功能,用于模拟用户在网页元素上的悬停行为。文中通过实例展示了如何使用Actions悬停并展开下拉菜单,以及在搜索时选择自动补全的字段。代码示例包括了打开百度首页,悬停在“更多”元素上显示下拉菜单并点击“音乐”,以及在搜索框输入关键词并自动补全的过程。
33 0
|
2天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(&lt;https://www.sojump.com/m/2792226.aspx/&gt;)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
9 0
|
2天前
|
Java 测试技术 项目管理
Java基础教程(22)-构建工具Maven的基本使用
【4月更文挑战第22天】Maven是Java项目管理及构建工具,简化构建、测试、打包和部署等任务。遵循约定优于配置原则,核心是`pom.xml`配置文件,用于管理依赖和项目信息。安装涉及下载、解压、配置环境变量。在IDEA中使用Maven创建项目,通过`pom.xml`添加依赖和管理版本。常用命令包括`clean`、`compile`、`test`、`package`、`install`和`deploy`。IDEA支持直接执行这些命令。
|
2天前
|
NoSQL Java 关系型数据库
Java基础教程(21)-Java连接MongoDB
【4月更文挑战第21天】MongoDB是开源的NoSQL数据库,强调高性能和灵活性。Java应用通过MongoDB Java驱动与之交互,涉及MongoClient、MongoDatabase、MongoCollection和Document等组件。连接MongoDB的步骤包括:配置连接字符串、创建MongoClient、选择数据库和集合。伪代码示例展示了如何建立连接、插入和查询数据。
|
3天前
|
存储 前端开发 测试技术
《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)
【4月更文挑战第27天】本文介绍了使用Java+Selenium进行Web自动化测试时,如何遍历和操作多选按钮的方法。文章分为两个部分,首先是一个本地HTML页面的示例,展示了多选按钮的HTML代码和页面效果,并详细解释了遍历多选按钮的思路:找到所有多选按钮的共同点,通过定位这些元素并放入list容器中,然后使用for循环遍历并操作。 第二部分介绍了在JQueryUI网站上的实战,给出了被测网址,展示了代码设计,同样使用了findElements()方法获取所有多选按钮并存储到list中,然后遍历并进行点击操作。最后,文章对整个过程进行了小结,并推荐了作者的其他自动化测试教程资源。
11 0
|
3天前
|
Java 关系型数据库 MySQL
Java基础教程(20)-Java连接mysql数据库CURD
【4月更文挑战第19天】MySQL是流行的关系型数据库管理系统,支持SQL语法。在IDEA中加载jar包到项目类路径:右击项目,选择“Open Module Settings”,添加库文件。使用JDBC连接MySQL,首先下载JDBC驱动,然后通过`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接。执行CRUD操作,例如创建表、插入数据和查询,使用`Statement`或`PreparedStatement`,并确保正确关闭数据库资源。
|
4天前
|
设计模式 算法 Java
Java基础教程(19)-设计模式简述
【4月更文挑战第19天】设计模式是软件设计中反复使用的代码设计经验,旨在提升代码的可重用性、可扩展性和可维护性。23种模式分为创建型、结构型和行为型三类。创建型模式如工厂方法、抽象工厂、建造者、原型和单例,关注对象创建与使用的分离。结构型模式涉及对象组合,如适配器、装饰器、外观等,增强结构灵活性。行为型模式专注于对象间职责分配和算法合作,包括责任链、命令、观察者等。设计模式提供标准化解决方案,促进代码交流和复用。
|
4天前
|
前端开发 测试技术 Python
《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)
【4月更文挑战第25天】本文介绍了自动化测试中如何处理单选和多选按钮的操作,包括它们的定义、HTML代码示例以及如何判断和操作这些元素。文章通过一个简单的HTML页面展示了单选和多选框的示例,并提供了Java+Selenium实现的代码示例,演示了如何检查单选框是否选中以及如何进行全选操作。
11 0
|
5天前
|
网络协议 Java 网络架构
Java基础教程(18)-Java中的网络编程
【4月更文挑战第18天】Java网络编程简化了底层协议处理,利用Java标准库接口进行TCP/IP通信。TCP协议提供可靠传输,常用于HTTP、SMTP等协议;UDP协议则更高效但不保证可靠性。在TCP编程中,ServerSocket用于监听客户端连接,Socket实现双进程间通信。UDP编程中,DatagramSocket处理无连接的数据报文。HTTP编程可以通过HttpURLConnection发送请求并接收响应。
|
6天前
|
前端开发 Java 测试技术
《手把手教你》系列技巧篇(三十二)-java+ selenium自动化测试-select 下拉框(详解教程)
【4月更文挑战第24天】本文介绍了在自动化测试中处理HTML下拉选择(select)的方法。使用Selenium的Select类,可以通过index、value或visible text三种方式选择选项,并提供了相应的取消选择的方法。此外,文章还提供了一个示例HTML页面(select.html)和相关代码实战,演示了如何使用Selenium进行选择和取消选择操作。最后,文章提到了现代网页中类似下拉框的新设计,如12306网站的出发地选择,并给出了相应的代码示例,展示了如何定位并选择特定选项。
16 0