Java Swing | Popup 和 PopupFactory 详解与示例

概述

Popup 和 PopupFactory 是 Java Swing 库的一部分。当我们想要向用户显示一个组件,并且该组件需要位于特定容器层次结构中所有其他组件的顶部时,通常就会使用到 Popups。PopupFactory 则是用于创建 Popups 的类。Popups 的生命周期通常很短,并且一般属于轻量级组件,包含的子组件也较为有限。

类的构造函数如下:

  • PopupFactory():创建一个 PopupFactory 的实例对象。

常用方法

方法

说明

getPopup(Component o, Component c, int x, int y)

创建一个 Popup。该 Popup 包含组件 c,并将其显示在所有者组件 o 的 坐标处。

hide()

隐藏并销毁该 Popup。

show()

使 Popup 可见。下面的程序将向我们展示 Popup 的具体用法:

1. Java 程序:创建一个 Popup 并将其显示在父窗体上

在这个例子中,我们将通过创建一个 PopupFactory 并使用 INLINECODEd7705d5d 函数来获取一个 Popup 对象 p。我们将把这个 Popup 添加到一个标题为“pop”的 JFrame 窗体 f 中。接下来,我们会创建一个标签并将其添加到容器面板 p2 中,同时使用 INLINECODE819697c8 函数设置面板 p2 的背景色。随后,我们将容器面板 p2 添加到 Popup 中。

我们还会创建一个标题为“click”的按钮,并为其添加一个动作监听器;当按钮被按下时,程序将显示这个 Popup。最后,我们将按钮 b 添加到一个面板中,再将该面板添加到窗体中。窗体的大小通过 INLINECODE91f67c2e 设置为 400×400。最后,使用 INLINECODE583ae4c4 函数显示窗体。

// Java Program to create a popup and display
// it on a parent frame
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class pop extends JFrame implements ActionListener {
    // popup
    Popup p;

    // constructor
    pop()
    {
        // create a frame
        JFrame f = new JFrame("pop");

        // create a label
        JLabel l = new JLabel("This is a popup");

        f.setSize(400, 400);

        PopupFactory pf = new PopupFactory();

        // create a panel
        JPanel p2 = new JPanel();

        // set Background of panel
        p2.setBackground(Color.red);

        p2.add(l);

        // create a popup
        p = pf.getPopup(f, p2, 180, 100);

        // create a button
        JButton b = new JButton("click");

        // add action listener
        b.addActionListener(this);

        // create a panel
        JPanel p1 = new JPanel();

        p1.add(b);
        f.add(p1);
        f.show();
    }

    // if the button is pressed
    public void actionPerformed(ActionEvent e)
    {
        p.show();
    }
    // main class
    public static void main(String args[])
    {
        pop p = new pop();
    }
}

输出

!image

2. Java 程序:创建一个 Popup(添加面板),显示在父窗体上,并为 Popup 添加动作监听器

在这个例子中,我们同样通过创建 PopupFactory 并使用 getPopup() 函数来获取 Popup 对象 p。我们会将外观设置为系统外观。

我们将 Popup 添加到标题为“pop”的 JFrame 窗体 f 中。我们会创建一个标签,以及一个标题为“OK”的按钮 b19(我们将为标签设置特定的字体对象),并将它们添加到容器面板 p2 中,同时使用 setBackground() 函数设置面板 p2 的背景色。接着,我们将容器面板 p2 添加到 Popup 中。

我们还会创建一个标题为“click”的按钮,并为其添加一个动作监听器;当按钮被按下时,程序将显示这个 Popup。按钮 b 被添加到一个面板中,然后该面板被添加到窗体中。窗体的大小通过 INLINECODEf35daeb0 设置为 400×400。最后,使用 INLINECODE9eb1ce16 函数显示窗体。

// Java Program to create a popup (add a panel) and
// display it on a parent frame and also
// add action listener to the popup
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class pop1 extends JFrame implements ActionListener {
    // popup
    Popup po;

    // frame
    JFrame f;

    // panel
    JPanel p;

    // popupfactory
    PopupFactory pf;

    // constructor
    pop1()
    {
        // create a frame
        f = new JFrame("pop");

        f.setSize(400, 400);

        pf = new PopupFactory();

        // create a label
        JLabel l = new JLabel("This  is a popup menu");

        // create a new button
        JButton b19 = new JButton("OK");

        // add action listener
        b19.addActionListener(this);

        try {
            // set windows look and feel
            UIManager.setLookAndFeel(UIManager.
                  getSystemLookAndFeelClassName());
        }
        catch (Exception e) {
        }

        // create a panel
        p = new JPanel();

        p.setBackground(Color.blue);

        // create a font
        Font fo = new Font("BOLD", 1, 14);

        l.setFont(fo);

        // add contents to panel
        p.add(l);
        p.add(b19);

        // create a popup
        po = pf.getPopup(f, p, 200, 100);

        // create a button
        JButton b = new JButton("click");

        // add action listener
        b.addActionListener(this);

        // create a panel
        JPanel p1 = new JPanel();

        p1.add(b);
        f.add(p1);
        f.show();
    }

    // if the button is pressed
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == b) {
            po.show();
        }
        else {
            po.hide();
        }
    }
    // main class
    public static void main(String args[])
    {
        pop1 p = new pop1();
    }
}

输出

!image

注意:上述程序可能无法在在线编译器中运行,请使用离线 IDE 进行运行。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/29098.html
点赞
0.00 平均评分 (0% 分数) - 0