📜  Java摇摆 |带有示例的 Popup 和 PopupFactory(1)

📅  最后修改于: 2023-12-03 15:32:03.556000             🧑  作者: Mango

Java摇摆——Popup 和 PopupFactory

Java摇摆(Swing)是Java GUI编程的一种选择。其中的Popup和PopupFactory组件可以在GUI应用程序中创建弹出窗口。本文将为程序员介绍如何使用Java摇摆的Popup和PopupFactory,并提供示例代码。

Popup 和 PopupFactory

Popup是Java摇摆中的一个组件,可以在GUI应用程序中创建弹出窗口。而PopupFactory则是Popup的工厂类,可以用于创建Popup的实例。Popup一般用于在应用程序中显示一些短暂的消息,如提示信息、菜单等。

Popup的使用相对简单,只需指定它在应用程序中的位置、大小以及包含的组件等。PopupFactory则可以更加灵活地创建Popup,并且可以在不同的上下文中使用不同的Popup实现。

下面是一个基本的Popup示例:

import javax.swing.*;

public class PopupExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Popup Example");

        JButton button = new JButton("Click me");
        button.addActionListener(e -> {
            JLabel label = new JLabel("Hello, world!");
            PopupFactory factory = PopupFactory.getSharedInstance();
            Popup popup = factory.getPopup(frame, label, button.getX(), button.getY() + button.getHeight());
            popup.show();
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    }
}

该示例中创建了一个JFrame窗口,其中包含一个JButton按钮。当点击按钮时,会弹出一个包含“Hello, world!”文本的Popup窗口,这个Popup窗口的位置是在按钮下方。

这里用到了PopupFactory.getSharedInstance()方法来获取PopupFactory实例,然后用其getPopup()方法来创建Popup实例。getPopup()方法需要指定Popup的父组件、弹出的组件以及Popup的位置。

示例:用 Popup 显示菜单

下面是一个稍微复杂一些的示例,它使用Popup和PopupFactory来显示一个简单的菜单。点击按钮时,弹出一个菜单,点击菜单项时,会弹出另一个Popup窗口,显示与菜单项相关的详细信息。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MenuPopupExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Menu Popup Example");

        JPopupMenu popupMenu = new JPopupMenu();
        JMenuItem menuItem1 = new JMenuItem("Menu item 1");
        JMenuItem menuItem2 = new JMenuItem("Menu item 2");
        popupMenu.add(menuItem1);
        popupMenu.add(menuItem2);

        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(200, 200));
        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e)) {
                    popupMenu.show(panel, e.getX(), e.getY());
                }
            }
        });

        menuItem1.addActionListener(e -> showPopup("Menu item 1 details", panel, e.getX(), e.getY()));
        menuItem2.addActionListener(e -> showPopup("Menu item 2 details", panel, e.getX(), e.getY()));

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    private static void showPopup(String text, Component parent, int x, int y) {
        JLabel label = new JLabel(text);
        PopupFactory factory = PopupFactory.getSharedInstance();
        Popup popup = factory.getPopup(parent, label, x, y);
        popup.show();
    }
}

在这个示例中,创建了一个JPopupMenu对象,并添加了两个JMenuItem对象。然后创建了一个JPanel对象,并对其进行了鼠标监听。当点击JPanel时,如果是右键点击,则弹出JPopupMenu菜单。

当点击菜单项时,会弹出一个包含菜单项详细信息的JLabel对象,这个JLabel对象也是用Popup和PopupFactory创建的。

总结

本文介绍了Java摇摆(Swing)中的Popup和PopupFactory组件,并提供了两个示例,分别演示了如何创建基本的Popup和如何使用Popup显示菜单。Popup和PopupFactory可以在GUI应用程序中创建短暂的消息、菜单等,可以提高应用程序的可用性和用户体验。程序员可以根据自己的需求使用Popup和PopupFactory来创建GUI应用程序中的弹出窗口。