当前位置: 首页 > 知识库问答 >
问题:

在列表上显示弹出菜单

魏成济
2023-03-14

我对弹出菜单有问题。我想要的是,当用户在jlist上单击鼠标右键时,会出现一个弹出菜单。我创建了一个类,在其中我创建了弹出菜单,一个扩展了mouselistener的类,以及另一个将鼠标侦听器添加到jlist的类。在扩展mouselistener的类中,我调用弹出菜单的类并显示它。问题是弹出菜单没有出现。

package mouseListener;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.*;

import view.___poupupmenu___;

public class Add_popupmenu_categoria implements MouseListener 
{
   JList <String> l = new JList <String> ();

    public Add_popupmenu_categoria (JList <String> l)
{
    this.l = l;
}

public void mouseClicked(MouseEvent evt)
{
    System.out.println("clicked");

    if (evt.isPopupTrigger()) 
    {
        System.out.println("enter in clicked");

        ___poupupmenu___ p = new ___poupupmenu___();

        l.setSelectedIndex(l.locationToIndex(evt.getPoint()));
        System.out.println(evt.getComponent());
        l.setComponentPopupMenu(p.menu_categoria);
        p.menu_categoria.show(evt.getComponent(), evt.getX(), evt.getY());

    } 
}          


public void mouseEntered(MouseEvent e)
{

}

public void mouseExited(MouseEvent e)
{

}

public void mousePressed(MouseEvent evt)
{
    System.out.println("pressed");

    if (evt.isPopupTrigger()) 
    {
        System.out.println("enter in pressed");

        ___poupupmenu___ p = new ___poupupmenu___();

        l.setSelectedIndex(l.locationToIndex(evt.getPoint()));
        System.out.println(evt.getComponent());
        l.setComponentPopupMenu(p.menu_categoria);
        p.menu_categoria.show(evt.getComponent(), evt.getX(), evt.getY());

    } 
}

public void mouseReleased(MouseEvent evt)
{

    System.out.println("released");

    if (evt.isPopupTrigger()) 
    {
        System.out.println("enter in released");

        ___poupupmenu___ p = new ___poupupmenu___();

        l.setSelectedIndex(l.locationToIndex(evt.getPoint()));
        System.out.println(evt.getComponent());
        l.setComponentPopupMenu(p.menu_categoria);
        p.menu_categoria.show(evt.getComponent(), evt.getX(), evt.getY());


    } 
}
}



package view;

import javax.swing.*;

import java.awt.*;

public class ___poupupmenu___ {

public JPopupMenu menu_categoria = new JPopupMenu();
public JPopupMenu menu_scuola = new JPopupMenu();
public JPopupMenu menu_maschile_femminile = new JPopupMenu();
public JPopupMenu menu_dirigenti_allenatori = new JPopupMenu();
public JPopupMenu menu_img_profilo = new JPopupMenu();

JMenuItem menu_elimina = new JMenuItem("Elimina");
JMenuItem menu_modifica = new JMenuItem("Modifica");
JMenuItem menu_apri = new JMenuItem("Apri...");    
JMenuItem menu_pagamento = new JMenuItem("Visualizza pagamenti");
JMenuItem menu_genitore = new JMenuItem("Visualizza genitore");
JMenuItem menu_visita_medica = new JMenuItem("Visualizza scadenza visita medica");

  public ___poupupmenu___ ()
  {
       menu_elimina.setFont(new Font("Segoe UI", 1, 15)); 
       menu_modifica.setFont(new Font("Segoe UI", 1, 15)); 
       menu_apri.setFont(new Font("Segoe UI", 1, 15)); 
       menu_pagamento.setFont(new Font("Segoe UI", 1, 15));  
       menu_genitore.setFont(new Font("Segoe UI", 1, 15)); 

       menu_categoria.add(menu_modifica);
       menu_categoria.add(menu_elimina);

       menu_scuola.add(menu_apri);
       menu_scuola.add(menu_visita_medica);
       menu_scuola.add(menu_genitore);
       menu_scuola.add(menu_pagamento);
       menu_scuola.add(menu_modifica);
       menu_scuola.add(menu_pagamento);

       menu_maschile_femminile.add(menu_apri);
       menu_maschile_femminile.add(menu_visita_medica);
       menu_maschile_femminile.add(menu_modifica);
       menu_maschile_femminile.add(menu_elimina);

       menu_dirigenti_allenatori.add(menu_apri);
       menu_dirigenti_allenatori.add(menu_modifica);
       menu_dirigenti_allenatori.add(menu_elimina);

   }

}


package controller;

import javax.swing.*;

import mouseListener.Add_popupmenu_categoria;

public class CategoriaController 
{

   public void add_popupmenu_Categoria (JList <String> l)
   {
      Add_popupmenu_categoria apmc = new Add_popupmenu_categoria (l);
      l.addMouseListener(apmc);
   }
}

当我点击我得到的是:

在released javax中按released enter。摆动JList[,0,0897x797,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],SelectionForegrough=sun。摆动PrintColorUIResource[r=51,g=51,b=51],visibleRowCount=8,layoutOrientation=0]点击

有人能帮我吗?

共有1个答案

范浩宕
2023-03-14

编辑:最简单的方法是只使用JList的setComponentPopupMenu方法:

JPopupMenu popup = new JPopupMenu();
popup.add(new JMenuItem("Hello World"));

JList<String> jList = new JList<String>();
jList.setComponentPopupMenu(popup);

setComponentPopupMenu(弹出)将弹出窗口附加到组件。如果右键单击组件,它将自动显示。不需要鼠标听器。

为swing组件实现弹出菜单的另一个简单方法是重写JComponent的getComponentPopupMenu()方法。对你来说,解决方案是这样的:

public class MyJListWithPopupMenu extends JList {
    //...
    @Override
    public JPopupMenu getComponentPopupMenu() {
        // create your PopupMenu
        return myJPopupMenu;
    }
    //...
}

然后,当您使用MyjListWithPopup菜单而不是常规的JList时,右键单击弹出窗口时,它将显示在正确的位置。

 类似资料:
  • Since 9.9 showPopMenu 右上角显示弹出的下拉菜单,如果设置了icon那么每一个菜单项都要求有icon,要不都没有icon。 特别注意,请右上角为默认三个点的时候不要调用本接口,右上角为自定义图片或者文字的时候可以调用。 注意:tag是必选项 该API在9.9版本之后可以使用 使用方法 AlipayJSBridge.call('showPopMenu', { menus:[

  • ap.showPopMenu(OPTION | items, CALLBACK) 显示导航栏右上角弹出的下拉菜单。可直接传入一个数组作为 OPTION.items 参数。 OPTION 参数说明 名称 类型 必填 描述 items Object Array 是 菜单数组,数组中每个项是一个对象(也可以是一个字符串,如果是字符串,会当作 item.title 参数)。item 的具体配置字段见下表

  • 我有一个双显示器设置,与我正在制作的程序不符: 我的JFrame显示在我的主/默认监视器上。该框架显示了几个提示打开JOptionPanes按钮。当单击其中任何一个时,JOptionPane将在主监视器旁边的第二台监视器上打开。偶尔它会正常显示,位于JFrame的中心,但20次中有19次会在第二个监视器上弹出。这是什么原因造成的?

  • 问题内容: 如何将通过javascript 函数打开的弹出窗口居中显示在屏幕变量中心,以当前选定的屏幕分辨率为中心? 问题答案: 更新:它现在也可以在尚未超出屏幕宽度和高度的窗口上运行! 如果您使用双显示器,则窗口将水平居中,而不是垂直居中…使用此功能可以解决此问题。 用法示例:

  • mui框架内置了弹出菜单插件,弹出菜单显示内容不限,但必须包裹在一个含.mui-popover类的div中,如下即为一个弹出菜单内容: <div id="popover" class="mui-popover"> <ul class="mui-table-view"> <li class="mui-table-view-cell"><a href="#">Item1</a></li

  • 我的应用程序有问题。。。溢出菜单不可见!我可以点击手机的右上角,菜单项就会显示出来,但这三个点并没有显示出来。 这是我的xml: Java代码: 我在StackOverflow上尝试了其他解决方案,但它们似乎都不起作用。我试过在两部手机上运行这个应用程序,都是Android版本 更新:我尝试在应用程序中添加导航抽屉。再次,当我点击抽屉按钮应该在的一侧时,菜单会显示出来,但按钮不可见。。。 更新2: