当前位置: 首页 > 面试题库 >

使用Java左键打开任务栏图标上的popup(Menu)

申屠恺
2023-03-14
问题内容

我正在使用Java中的任务栏图标工作,我想用鼠标左键打开一个弹出菜单,就像用右键单击一样打开弹出菜单,请快速响应帮助我。

提前致谢…

这是适用于右键单击的代码,需要在单击鼠标左键时显示相同的弹出窗口…不要忘记将任何图像放置在名称为“ titleImg.jpg”的“ src /
img”文件夹中

只需运行此…这是一个有效的示例,但我必须使用左键单击以显示相同的弹出窗口

我已经检查了鼠标侦听器,它侦听了托盘图标上的左键单击,但是如何使用该窗口显示弹出菜单?

    package com.abc.dao;

import java.awt.AWTException;
import java.awt.CheckboxMenuItem;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;

public class MyTaskTray {
    public static void main(String arg[]){

        //Check the SystemTray is supported
        if (!SystemTray.isSupported()) {
            System.out.println("SystemTray is not supported");
            return;
        }
        final PopupMenu popup = new PopupMenu();
        final TrayIcon trayIcon =
                new TrayIcon(Toolkit.getDefaultToolkit().getImage(new java.io.File("").getAbsolutePath()+"/bin/img/titleImg.jpg"), "Library Drop");
        final SystemTray tray = SystemTray.getSystemTray();

        // Create a pop-up menu components
        MenuItem aboutItem = new MenuItem("About");
        CheckboxMenuItem cb1 = new CheckboxMenuItem("Set auto size");
        CheckboxMenuItem cb2 = new CheckboxMenuItem("Set tooltip");
        Menu displayMenu = new Menu("Display");
        MenuItem errorItem = new MenuItem("Error");
        MenuItem warningItem = new MenuItem("Warning");
        MenuItem infoItem = new MenuItem("Info");
        MenuItem noneItem = new MenuItem("None");
        MenuItem exitItem = new MenuItem("Exit");

        //Add components to pop-up menu
        popup.add(aboutItem);
        popup.addSeparator();
        popup.add(cb1);
        popup.add(cb2);
        popup.addSeparator();
        popup.add(displayMenu);
        displayMenu.add(errorItem);
        displayMenu.add(warningItem);
        displayMenu.add(infoItem);
        displayMenu.add(noneItem);
        popup.add(exitItem);

        trayIcon.setPopupMenu(popup);

        try {
            tray.add(trayIcon);
        } catch (AWTException e) {
            System.out.println("TrayIcon could not be added.");
        }

    }
}

问题答案:

您实际上缺少的是显示PopupMenu的父组件。实现此目的的一种方法是使用“不可见”框架(实际上是可见的,但具有0边界且未修饰,因此您看不到它),如下所示:

import java.awt.AWTException;
import java.awt.CheckboxMenuItem;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.MalformedURLException;
import java.net.URL;

public class MyTaskTray {
    public static void main(String arg[]) throws MalformedURLException {
        final Frame frame = new Frame("");
        frame.setUndecorated(true);
        // Check the SystemTray is supported
        if (!SystemTray.isSupported()) {
            System.out.println("SystemTray is not supported");
            return;
        }
        final TrayIcon trayIcon = new TrayIcon(Toolkit.getDefaultToolkit().getImage(
                new URL("http://home.comcast.net/~supportcd/Icons/Java_Required.jpg")), "Library Drop");
        final SystemTray tray = SystemTray.getSystemTray();

        // Create a pop-up menu components
        final PopupMenu popup = createPopupMenu();
        trayIcon.setPopupMenu(popup);
        trayIcon.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getButton() == MouseEvent.BUTTON1) {
                    frame.add(popup);
                    popup.show(frame, e.getXOnScreen(), e.getYOnScreen());
                }
            }
        });
        try {
            frame.setResizable(false);
            frame.setVisible(true);
            tray.add(trayIcon);
        } catch (AWTException e) {
            System.out.println("TrayIcon could not be added.");
        }

    }

    protected static PopupMenu createPopupMenu() {
        final PopupMenu popup = new PopupMenu();
        MenuItem aboutItem = new MenuItem("About");
        CheckboxMenuItem cb1 = new CheckboxMenuItem("Set auto size");
        CheckboxMenuItem cb2 = new CheckboxMenuItem("Set tooltip");
        Menu displayMenu = new Menu("Display");
        MenuItem errorItem = new MenuItem("Error");
        MenuItem warningItem = new MenuItem("Warning");
        MenuItem infoItem = new MenuItem("Info");
        MenuItem noneItem = new MenuItem("None");
        MenuItem exitItem = new MenuItem("Exit");
        // Add components to pop-up menu
        popup.add(aboutItem);
        popup.addSeparator();
        popup.add(cb1);
        popup.add(cb2);
        popup.addSeparator();
        popup.add(displayMenu);
        displayMenu.add(errorItem);
        displayMenu.add(warningItem);
        displayMenu.add(infoItem);
        displayMenu.add(noneItem);
        popup.add(exitItem);
        return popup;
    }
}

从Java 1.7开始,您可以添加以下行以从任务栏中删除应用程序栏:

frame.setType(Type.UTILITY);


 类似资料:
  • 所以我有以下代码: 运行良好,闪屏显示得与我想要的完全一样,但它不在任务栏中显示图标,因此可以单击另一个窗口,再也看不到闪屏栏(它隐藏在其他窗口后面)。br> 我已经尝试使用窗口标志 ,但是如果我使用它,任务栏中仍然没有图标,而且现在它总是位于所有其他窗口的顶部(这是我不想要的)。br> 到目前为止,我已经浏览了一些窗口标志,并在谷歌上搜索了很长一段时间,我试图显示它。br> 另外,我知道我可以给

  • 如何在运行时更改程序任务栏按钮右键单击上下文菜单中的标题?我是说这里用红色圈起来的文字。 标题似乎取自程序集标题。我需要在运行时从代码中动态更改标题。我有一个EXE,用户把它看作是许多不同的应用程序--它在运行时读取数据文件,然后大规模地自定义它的外观,包括窗口标题。我还需要自定义这个右键菜单中的标题。没有一个字幕能涵盖所有的内容。如果有必要,我愿意考虑对Windows API的p/invoke调

  • 我正在我的应用程序中实现导航视图。 实际上,我可以点击“汉堡包”图标(在我的工具栏中)和从左到右旋转来打开它。 我只想通过工具栏中的图标打开它,禁用swype。有可能做到吗? 编辑 如果我使用上面的代码,我使用抽屉布局。LOCK\u MODE\u LOCKED\u CLOSED,我禁用了icon和swype。

  • 我有一个pygame应用程序,我想为它设置任务栏图标。我试过了 但毫无效果。我用cx_Freeze将它编译成一个。exe,并在那里设置。exe图标。当我运行该程序时,它将任务栏中的图标设置为默认的pygame图标。我还设置了pygame窗口的图标 其他信息: 提前感谢您的任何帮助。

  • 我想在键盘打开时隐藏屏幕上的标签栏。我已经尝试过更改AndroidManifest.XML文件。通过将更改为,当键盘打开时,屏幕标签栏会隐藏,但问题是我现在的文本输入与键盘重叠,我也尝试过KeyBoardAvidingView,但它不起作用,因为当更改XML文件时,它也会影响其他应用程序组件。所以告诉我如何在键盘打开时隐藏标签栏而不更改XML文件。

  • 我创建了从JFrame继承的通知窗口,但它们在windows任务栏中以新图标出现。当通知出现时(例如在skype中,当新消息来时),是否可以突出显示主应用程序图标,而不在通知窗口的任务栏中显示新图标? 以下是弹出窗口的代码: