精华内容
下载资源
问答
  • [图片说明](https://img-ask.csdn.net/upload/201505/28/1432810907_966662.jpg)我弹出的这个PopupMenu ,想在点击添加好友响应事件,但是他ActionListener,该怎么样去 响应事件,求解,刚那个朋友说的不对。求解。
  • java AWT PopupMenu(右键菜单)

    千次阅读 2017-10-08 18:08:10
    右键菜单使用PopupMenu对象表示,创建步骤如下: (1)创建PopupMenu的实例。 (2)创建多个MenuItem的多个实例,依次将这些实例加入到PopupMenu中。 (3)将PopupMenu加入到目标组件中。 (4)为需要出现上下文...

    右键菜单使用PopupMenu对象表示,创建步骤如下:
    (1)创建PopupMenu的实例。
    (2)创建多个MenuItem的多个实例,依次将这些实例加入到PopupMenu中。
    (3)将PopupMenu加入到目标组件中。
    (4)为需要出现上下文菜单的组件编写鼠标监听器,当用户释放鼠标右键时弹出右键菜单。

    package javaAWT;
    
    import java.awt.BorderLayout;
    import java.awt.CheckboxMenuItem;
    import java.awt.Dimension;
    import java.awt.Frame;
    import java.awt.Menu;
    import java.awt.MenuItem;
    import java.awt.MenuShortcut;
    import java.awt.Panel;
    import java.awt.PopupMenu;
    import java.awt.TextArea;
    import java.awt.Desktop.Action;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class PopupMenuTest {
    
        private TextArea tArea = new TextArea(4, 50);
        private Frame frame = new Frame("PopupMenu");
        PopupMenu popupMenu = new PopupMenu();
        CheckboxMenuItem autoWrap = new CheckboxMenuItem("Auto Wrap");
        MenuItem copyItem = new MenuItem("Copy");
        MenuItem pasteItem = new MenuItem("Paste");
        Menu format = new Menu("Format");
        MenuItem commentItem = new MenuItem("Comment", new MenuShortcut(KeyEvent.VK_SLASH, true));
        MenuItem cancelItem = new MenuItem("Canecl");
    
        public void init() {
            ActionListener menuListener = new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    String cmd = e.getActionCommand();
                    tArea.append("Clicked "+ cmd +" Menu " + "\n");
                    if (cmd.equals("Cancel")) {
                        System.exit(0);
                    }
                }
            };
    
            commentItem.addActionListener(menuListener);
            // 为pop菜单添加菜单项
            popupMenu.add(autoWrap);
            popupMenu.addSeparator();
            popupMenu.add(copyItem);
            popupMenu.add(pasteItem);
    
            format.add(commentItem);
            format.add(cancelItem);
            popupMenu.add(new MenuItem("-"));
            popupMenu.add(format);
    
    
            final Panel panel = new Panel();
            panel.setPreferredSize(new Dimension(300, 160));
            panel.add(popupMenu);
            panel.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseReleased(MouseEvent e) {
                    // TODO Auto-generated method stub
                    super.mouseReleased(e);
                    // 如果释放的是鼠标右键
                    if (e.isPopupTrigger()) {
                        popupMenu.show(panel, e.getX(), e.getY());
                    }
                }
            });
    
            frame.add(panel);
            frame.add(tArea, BorderLayout.NORTH);
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    // TODO Auto-generated method stub
                    super.windowClosing(e);
                    System.exit(0);
                }
            });
    
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            new PopupMenuTest().init();
        }
    }
    

    这里写图片描述

    展开全文
  • 本人萌新,利用业余时间学习Java。最近在写一个GUI程序的时候遇到一个问题,系统托盘创建弹出菜单中文乱码,网上搜索很多内容都没有找到解决方案,现将个人解决方案分享给大家,希望有所帮助一、PopupMenu存在的问题...

    本人萌新,利用业余时间学习Java。最近在写一个GUI程序的时候遇到一个问题,系统托盘创建弹出菜单中文乱码,网上搜索很多内容都没有找到解决方案,现将个人解决方案分享给大家,希望有所帮助

    一、PopupMenu存在的问题

    标准文档中系统托盘的构造函数:TrayIcon(Image image,String tips,PopupMenu menu),但实施过程中遇到两个问题:

    1、PopupMenu添加的菜单项MenuItem不支持图标,是awt级组件,没有提供paint函数,也就意味着不能重绘,去实现带图标的菜单,这在作为强迫症的我是无法接受的;

    2、PopupMenu中文乱码,只支持英文,网上需要修改文件编码方式为GBK,然而在整个项目中都采用了UTF-8,这也不是解决办法。

    二、基于JPopupMenu的解决方案

    JPopupMenu是Swing组件,而且支持图标+文本,更美观。在标准API里,添加JPopupMenu的有两种方式:

    1、Component组件通过setComponentPopuMenu(JPopupMenu)绑定JPopupMenu;

    2、JPopupMneu调用show(Component c,int x,int y)函数绑定至组件;

    再研究发现,TrayIcon不是Component,现有方法实现直接绑定是行不通的。弹出菜单的关键事件:鼠标点击(含有快捷键等,不一一列举),然后生成菜单。那么我们为什么不能再点击系统托盘的时候,单独创建一个Component作为JPopupMenu的坐标参考呢?系统托盘的位置,与程序的主界面(JFrame)在是没有关联的,可以脱离主框架独立存在的Component中,JWindow可以独立存在的,没有标题栏,也不会在任务栏显示窗口,显然这是作为一个坐标参考的完美组件。接下来就好办了:

    3、获取鼠标点击的坐标值,在这个坐标值上创建一个JWindow,将JPopupMenu绑定到这个JWindow的(0,0)位置上,弹出菜单显示后再获取弹出菜单的尺寸,再根据尺寸回调JWindow的大小,这样JPopupMenu就完美的遮罩了JWindow,看不出JWindow的存在,到这里,还有最后一个问题,弹出菜单消失,JWindow依然存在;

    4、查看JPopupMenu的API文档,发现有三个函数firePopupMenuCanceled()、firePopupMenuWillBecomeInvisible()、firePopupMenuWillBecomeVisible(),是菜单消失、即将消失、消失前、消失后调用的函数,所以,直接选择其中任意一个函数进行重写,先执行JWindow.dispose(),再super执行一下原函数就OK了,意思就是,再消失、即将消失前、消失后,将JWindow关闭。

    至此,完美实现系统托盘弹出菜单。

    第一次分享,可能有大神有更好的解决方案,请多多指教。

    展开全文
  • PopuMenu的默认的样子是不怎么的: 文字很粗,22sp,按下的背景很黄。...现记录如下:样式的修改流程:1、直接修改主题样式方法(1)创建PopupMenu样式;(2)创建Activity主题样式,并将PopupMenu样式添加进来;(3)在An...

    PopuMenu的默认的样子是不怎么的:

    bac198421b69add83b9fd6087e96746b.png

    文字很粗,22sp,按下的背景很黄。于是,研究怎么修改其样式。最后发现,PopuMenu的使用实在是太坑了,实在是一点也不好使,完全建议抛弃吧,还不如自己封装PopupWindow成菜单。现记录如下:

    样式的修改流程:

    1、直接修改主题样式方法

    (1)创建PopupMenu样式;

    (2)创建Activity主题样式,并将PopupMenu样式添加进来;

    (3)在AndroidMainfest.xml中配置Activity的主题

    2、通过构造方法,参数最多的那个。

    PopupMenu popupMenu = new PopupMenu(getBaseContext(), v,Gravity.NO_GRAVITY,0,R.style.popMenu_style);

    但是,无论我怎么使用就是不成功,就是崩溃。因为这货需要到安卓5.1(api22以上)才会支持

    存在的问题:

    1、在Activity主题低于Holo下(api11以下),无论怎么修改样式都无效。

    PopupMenu样式:

    @drawable/popenu_background

    @color/springgreen

    5sp

    Activity主题:

    @style/Activity_Animation_Zoon

    @style/popMenu_style

    Java代码使用:

    PopupMenu popupMenu = new PopupMenu(Activity.this, v);

    getMenuInflater().inflate(R.menu.core_more_popmenu, popupMenu.getMenu());

    popupMenu.show();

    既然PopupMenu继承context主题,那么改变Context主题总可以了吧,然而,事实是,就算这么搞:

    Context context = getBaseContext();

    context.setTheme(R.style.popMenu_style);

    PopupMenu popupMenu = new PopupMenu(context, v);

    也是没用的,变灰,但是什么用的都没有:

    3c7e50e291c39394c821bef11bd8ec24.png

    2、当Activity的主题为Holo时、

    PopupMenu样式:

    @drawable/popenu_background

    @color/springgreen

    14sp

    @color/black

    Activity主题:

    style name="Theme_Zoon_white" mce_bogus="1" parent="@android:style/Theme.Holo.NoActionBar">

    @style/Activity_Animation_Zoon

    @style/popMenu_style

    Java代码:

    PopupMenu popupMenu = new PopupMenu(getBaseContext(), v);

    效果则是黑麻麻的一片,设置的TextView的颜色,PopupMenu的背景都无效。但文字的大小有改变,但不是自己设置的大小:

    b437a43f8290f64216ce9656116d1ceb.png

    而当context对象设置为Activity.this代码时:

    PopupMenu popupMenu = new PopupMenu(Activity..this,v);

    3.当Activity的主题为Holo.Light时(api13以上)

    PopupMenu样式:

    @drawable/popenu_background

    @color/springgreen

    14sp

    @color/green

    Activity主题:

    @style/Activity_Animation_Zoon

    @style/popMenu_style

    Java代码:

    PopupMenu popupMenu = new PopupMenu(this, v);

    文字颜色和点击颜色,背景颜色设置仍然无效,Light的默认色则是白色。同样只有文字大小有改变,但也不是自己设置的值:

    b2ca065bcebf7e73d42e4916057c3901.png

    此时,若java代码写的是getBaseContext,则又是黑麻麻一片,但能看见文字等。

    bdf0884a88006897a2c0e4598f751e98.png

    原因大概是BaseContext拥有父的主题,Holo.Light的父样式,就是Holo.显示是黑的。

    总结:

    PopupMenu很糟糕,很糟糕。熬买糕。

    文字大的一逼。

    要想使用的好,需要继承Holo或Holo.Light的样式,才能好使一点。可自定义性实在不高。可以考虑趴趴源码,用反射的方式再修改一些东东。

    还是推荐使用自己定义PopupWindow为菜单来的可靠。

    为什么会如此?内部的样式定义怎么会这么难搞?不知道,得继续研究啊。。。。

    展开全文
  • PopupMenu使用:

    2021-02-27 12:28:47
    mPopupMenu.setOnDismissListener(newOnDismissListener() { @Overridepublic voidonDismiss(PopupMenu menu) { mFlowMenuItem.setEnabled(true); invalidateOptionsMenu(); } });try{ Field field= mPopupMenu....

    @Overridepublic booleanonCreateOptionsMenu(Menu menu) {

    MenuInflater inflater=getMenuInflater();

    inflater.inflate(R.menu.fm_action_bar_favorite, menu);

    mFlowMenuItem=menu.findItem(R.id.fm_menu_favorite);return true;

    }public voidshowPopupMenu() {

    mPopupMenu= newPopupMenu(mContext, findViewById(R.id.fm_menu_favorite));

    Menu menu=mPopupMenu.getMenu();

    mPopupMenu.getMenuInflater().inflate(R.menu.fm_menu_favorite, menu);

    mPopupMenu.setOnMenuItemClickListener(newOnMenuItemClickListener() {

    @Overridepublic booleanonMenuItemClick(MenuItem item) {switch(item.getItemId()) {caseR.id.fm_station_add:

    showAddNewStationDialog();break;caseR.id.fm_remove_all:

    showRemoveAllStationDialog();break;caseR.id.fm_return:

    finish();break;default:break;

    }return false;

    }

    });

    mPopupMenu.setOnDismissListener(newOnDismissListener() {

    @Overridepublic voidonDismiss(PopupMenu menu) {

    mFlowMenuItem.setEnabled(true);

    invalidateOptionsMenu();

    }

    });try{

    Field field= mPopupMenu.getClass().getDeclaredField("mPopup");

    field.setAccessible(true);

    MenuPopupHelper mHelper=(MenuPopupHelper) field.get(mPopupMenu);

    mHelper.setForceShowIcon(true);

    }catch (IllegalAccessException |NoSuchFieldException e) {

    e.printStackTrace();

    }

    mPopupMenu.show();

    }

    @Overridepublic boolean onKeyDown(intkeyCode, KeyEvent event) {if (keyCode ==KeyEvent.KEYCODE_MENU){

    mFlowMenuItem.setEnabled(false);

    showPopupMenu();return true;

    }return super.onKeyDown(keyCode, event);

    }

    展开全文
  • 对咬运行的.java文件右边 run as 运行参数配置: -Dfile.encoding=GB18030 转载于:https://my.oschina.net/passer007/...
  • Java AWT PopupMenu

    2021-03-13 16:50:52
    实现弹出菜单时需要注册一个监听类继承MouseAdapter类并实现... 4 } 5 } pm是PopupMenu对象,message为Label对象,用来显示消息。 转载于:https://www.cnblogs.com/stansonwilliam/archive/2012/10/26/2740477.html
  • Java弹出式菜单(PopupMenu

    千次阅读 2012-05-09 17:01:23
    弹出式菜单(PopupMenu) 构造方法 public PopupMenu(); 例如:PopupMenu popM=new PopupMenu(); MenuItem miOpen=new MenuItem(“打开”); MenuItem miSave=new MenuItem(“保存”); popM.add(miOpen); popM.add...
  • java.lang.Objectjava.awt.MenuComponentjava.awt.MenuItemjava.awt.Menujava.awt.PopupMenu所有已实现的接口:MenuContainer, Serializable, javax.accessibility.Accessiblepublic class PopupMenuextends Menu...
  • MenuItem 显示中文乱码问题解决方案今天在使用Java做系统托盘图标(TrayIcon),需要为其增加一个右键弹出菜单(PopupMenu),在使用菜单项(MenuItem)时,遇到了一个非常痛苦的事情:中文乱码~~~~。这个问题不经常...
  • 我的应用程序有问题.我需要显示一个PopupMenu,我需要此菜单中的每个项目都包含文本和图像....public void showMenu(Button button) {PopupMenu popupMenu = new PopupMenu(this, button);popupMenu.getMenuInflater(...
  • JAVA Swing 系统托盘JPopupMenu + JDialog 取代 PopupMenu问题PopupMenuJPopupMenu思路尝试最终方案代码 问题 PopupMenu 中文乱码,还不支持UTF-8 单调,没法添加骚气的图片 JPopupMenu 必须选择某项才消失,点击...
  • // Create popup menu, attach popup menu listener JPopupMenu popupMenu = new JPopupMenu("Title"); PopupMenuListener popupMenuListener = new MyPopupMenuListener(); popupMenu.addPopupMenuListener...
  • } } private void showPopup(MouseEvent e) { if (e.isPopupTrigger()) { popupMenu.show(e.getComponent(), e.getX(), e.getY()); } } } so my question is, is saving the row number the only way that i can do...
  • 基本上,通过调用AWTUtilities.setWindowOpaque(window,false)使JFrame的背景透明,我的JPopupMenu有时显示为空白.public class JavaApplication8 {JPopupMenu popup;JMenuItem open;JLabel bgLabel = new JLabel(...
  • PopupMenu的简要使用

    2020-11-10 09:13:36
    PopupMenu的创建,使用及常见用法 一:功能概述 PopupMenu可以非常方便的在指定view的下面显示一个弹出菜单,该弹出菜单的位置是可变的。在一些应用里面例如浏览器里面长按屏幕会显示弹出菜单。 二:创建基本流程 1...
  • 我无法更改Appcompat PopupMenu的宽度,因为菜单项在MenuPopupHelper.java中使用此布局abc_popup_menu_item_layout.xml,它将菜单项minWidth设置为196dip.xmlns:android=...
  • Java实现窗体右键菜单,简约易操作的窗体菜单,这是一个相当易懂的制作实例。  super( "右键弹出菜单" ); //调用父类构造函数  ChangeColorAction action = new ChangeColorAction(); //菜单项事件处理  ...
  • PopuMenu的默认的样子是不怎么的:文字很粗,22sp,按下的背景很黄。...现记录如下:样式的修改流程:1、直接修改主题样式方法(1)创建PopupMenu样式;(2)创建Activity主题样式,并将PopupMenu样式添加进来;(3)在And...
  • http://blog.csdn.net/loucyin/article/details/50813439 转载于:https://www.cnblogs.com/jianglijs/p/7831569.html
  • 修改反射PopupMenu宽度

    2020-11-18 14:08:19
    private lateinit var popupMenu: PopupMenu interface MenuItemClick : PopupMenu.OnMenuItemClickListener { override fun onMenuItemClick(item: MenuItem?): Boolean { return false } } @Suppre.
  • PopupMenu的简单用法

    千次阅读 2015-06-19 01:21:07
    PopupMenu代表弹出式菜单,它会在指定组件上弹出PopupMenu,默认情况下,PopupMenu会显示在该组件的下方或上方。PopupMenu可增加多个菜单项,并可为菜单项增加子菜单。  使用PopupMenu创建菜单的步骤非常简单,...
  • java参数不对怎么弄

    2021-02-26 10:11:34
    } } } ---------- compiler ---------- DebugTwelve2.java:14: 错误: 需要'('或'[' throw(new ArithmeticException); ^ DebugTwelve2.java:20: 错误: 需要')' System.out.println(Byte can't hold value higher ...
  • JavaFX 2中的PopupMenu

    2020-05-04 00:25:39
    创建弹出菜单 要在JavaFX中创建Popupmenu,可以使用ContextMenu类。 您向其中添加MenuItems,也可以使用SeparatorMenuItem创建可视分隔符。 在下面的示例中,我选择子类ContextMenu并将MenuItems添加到其构造...
  • 好像是由context决定的,前几天需要设置style,找了很久才找一一个办法,似乎是通过 ContextThemeWrapper 包装一个 Context 然后把 Context 作为参数传递给popupmenu的构造函数java代码如下/***********************...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼importjava.awt.*;importjava.awt.event.*;publicclasscalculationextendsFrameimplementsActionListener,ItemListener{staticcalculationfrm=newcalculation();...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,146
精华内容 1,258
关键字:

java的popupmenu

java 订阅