Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有系统托盘上下文菜单的渐变背景_Java_Swing_Gradient_System Tray - Fatal编程技术网

Java 具有系统托盘上下文菜单的渐变背景

Java 具有系统托盘上下文菜单的渐变背景,java,swing,gradient,system-tray,Java,Swing,Gradient,System Tray,我正在用java开发桌面应用程序。启动时,我的应用程序从系统托盘运行。但系统托盘的上下文菜单具有符合操作系统的标准外观。我想自定义上下文菜单。我想为其提供渐变背景,想更改字体、边框等。让我知道这可能吗? 如果有一些例子,请提供相同的链接 提前谢谢。嗯,只有斯温古鲁的一个能帮你解决这个问题 import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import j

我正在用java开发桌面应用程序。启动时,我的应用程序从系统托盘运行。但系统托盘的上下文菜单具有符合操作系统的标准外观。我想自定义上下文菜单。我想为其提供渐变背景,想更改字体、边框等。让我知道这可能吗? 如果有一些例子,请提供相同的链接

提前谢谢。

嗯,只有斯温古鲁的一个能帮你解决这个问题

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class FunnyMenuTest {

    private JPopupMenu popupMenu;
    private JMenuItem m_mniInsertRow;
    private JMenuItem m_mniInsertScrip;
    private JMenuItem m_mniDeleterRow;
    private JMenuItem m_mniDeleteExpiredScrip;
    private JMenuItem m_mniSetAlert;

    public void makeUI() {
        JFrame frame = new JFrame("Funny JMenu Test");
        popupMenu = new JPopupMenu();
        m_mniInsertRow = new JMenuItem("Insert a Row");
        m_mniInsertRow.setOpaque(false);
        m_mniInsertScrip = new JMenuItem("Insert a Scrip");
        m_mniInsertScrip.setOpaque(false);
        m_mniDeleterRow = new JMenuItem("Delete a Row");
        m_mniDeleterRow.setOpaque(false);
        m_mniDeleteExpiredScrip = new JMenuItem("Delete a Expired Scrip");
        m_mniDeleteExpiredScrip.setOpaque(false);
        m_mniSetAlert = new JMenuItem("Set Alert");
        m_mniSetAlert.setOpaque(false);
        popupMenu.add(m_mniInsertRow);
        popupMenu.add(m_mniInsertScrip);
        popupMenu.addSeparator();
        popupMenu.add(m_mniDeleterRow);
        popupMenu.add(m_mniDeleteExpiredScrip);
        popupMenu.add(new JSeparator());
        popupMenu.add(m_mniSetAlert);
        JMenuBar menuBar = new JMenuBar();
        for (int i = 0; i < 5; i++) {
            JMenu menu = new JMenu("Menu " + i);
            for (int j = 0; j < 5; j++) {
                JMenuItem item = new JMenuItem("Item " + j);
                item.setOpaque(false);
                menu.add(item);
            }
            menuBar.add(menu);
        }
        JMenu menu = new JMenu("Menu 1");
        JMenuItem item = new JMenuItem("Item ");
        item.setOpaque(false);
        menu.add(item);
        menuBar.add(menu);
        JPanel jp = new JPanel();
        jp.setPreferredSize(new Dimension(400, 400));
        jp.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseReleased(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    int x = e.getX();
                    int y = e.getY();
                    popupMenu.show(e.getComponent(), x, y);
                }
            }
        });

        frame.getContentPane().add(jp);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(400, 400));
        frame.setLocationRelativeTo(null);
        frame.setJMenuBar(menuBar);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new FunnyMenuTest().makeUI();
            }
        });
        UIManager.put("PopupMenuUI", "JMenu.GradientPopupMenuUI");
    }
}

“从系统托盘运行”是什么意思?那句话让我有点困惑。这就是你所说的吗?检查以下链接:上面的链接将向你解释系统托盘功能。这里显示的菜单是我想要提供渐变背景的菜单。我认为这足以让u..+1了解渐变弹出菜单的问题。唯一的疑问是UI依赖L&F。更改L&F可能会损坏此功能。@mKorble:在博客的链接中,使用了JMenuItem。但此JMenuItem不能与SystemTray一起使用。那么您知道如何在系统托盘中使用JMenuItem(或JPOppMenu)吗?@Krutika您是否阅读了您发布的链接教程?系统托盘是唯一具有JPOppMenu实现功能的图标,检查并@Krutika@mKorble:让我具体说明一下..在您的第一个链接中trayIcon=new trayIcon(图像,“托盘演示”,弹出窗口);用于将弹出菜单添加到托盘图标。以下是限制。JPOPUPMENUS不能与此一起使用。。。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.MultipleGradientPaint.CycleMethod;
import java.awt.Paint;
import java.awt.geom.Point2D;
import javax.swing.JComponent;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicPopupMenuUI;

public class GradientPopupMenuUI extends BasicPopupMenuUI {

    private Paint paint = new LinearGradientPaint(new Point2D.Double(5, -5), new Point2D.Double(),
            new float[]{0.2F, 0.9F}, new Color[]{Color.WHITE, Color.GREEN}, CycleMethod.REFLECT);

    public static ComponentUI createUI(JComponent c) {
        return new GradientPopupMenuUI();
    }

    @Override
    public void paint(Graphics g, JComponent c) {
        ((Graphics2D) g).setPaint(paint);
        g.fillRect(0, 0, c.getWidth(), c.getHeight());
    }
}