给JList中的Item添加右键点击弹出菜单事件

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;

public class JListTest extends JFrame {

 JPopupMenu popupMenu =null;
 JList list=null;
 JPanel mainPanel=null;
 JScrollPane scrollPane=null;
 
 public JListTest() {
  initComponent();
  setSize(200, 300);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setLocationRelativeTo(null);
  setVisible(true);
 }

 private void initComponent() {
  mainPanel = new JPanel();
  scrollPane = new JScrollPane();
  popupMenu = new JPopupMenu();
  popupMenu.add(new JMenuItem("Open")); //添加菜单项Open
  popupMenu.add(new JMenuItem("Save"));
  mainPanel.setLayout(new BorderLayout());
  list = new JList();
  list.setModel(new DefaultListModel());

  list.addMouseListener(new MouseAdapter() {
   
 
   @Override
   public void mouseClicked(MouseEvent e) {
//    maybeShowPopup(e);
   }

   @Override
   public void mousePressed(MouseEvent e) {
     list.setSelectedIndex(list.locationToIndex(e.getPoint())); //获取鼠标点击的项
    maybeShowPopup(e);
    
   }

   @Override
   public void mouseReleased(MouseEvent e) {
    maybeShowPopup(e);
   }
   //弹出菜单
    private void maybeShowPopup(MouseEvent e) {
           if (e.isPopupTrigger()&&list.getSelectedIndex()!=-1) {
            
            //获取选择项的值
            Object selected = list.getModel().getElementAt(list.getSelectedIndex());
            System.out.println(selected);
            popupMenu.show(e.getComponent(),e.getX(), e.getY());
           }
       }

   
   
  });

  list.setListData(new Object[] { "name", "age", "sex", "name", "age",
    "name", "age", "name", "age" });
  scrollPane.setViewportView(list);
  mainPanel.add(scrollPane, BorderLayout.CENTER);
  this.add(mainPanel);
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  new JListTest();

 }

}
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个实现上述要求的Java程序: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import java.util.ArrayList; public class MyFrame extends JFrame { private JLabel label; private JTextField textField; private JButton button; private JList<String> list; private DefaultListModel<String> listModel; public MyFrame() { super("My Frame"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); // Initialize components label = new JLabel("Selected item will be displayed here"); textField = new JTextField(10); textField.setDocument(new NumberOnlyDocument()); button = new JButton("Add"); listModel = new DefaultListModel<String>(); list = new JList<String>(listModel); list.addMouseListener(new PopupListener()); // Add components to the frame JPanel panel = new JPanel(new GridLayout(3, 2)); panel.add(new JLabel("Enter a number:")); panel.add(textField); panel.add(button); panel.add(new JLabel("")); panel.add(new JLabel("Selected item:")); panel.add(label); add(panel, BorderLayout.NORTH); add(new JScrollPane(list), BorderLayout.CENTER); // Add action listeners button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String text = textField.getText().trim(); if (!text.isEmpty()) { listModel.addElement(text); textField.setText(""); } } }); list.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { String selected = list.getSelectedValue(); if (selected != null) { label.setText(selected); } } } }); setVisible(true); } // Document class to only allow numeric input private class NumberOnlyDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if (str != null && str.matches("[0-9]+")) { super.insertString(offs, str, a); } } } // Popup menu class private class PopupListener extends MouseAdapter { public void mousePressed(MouseEvent e) { maybeShowPopup(e); } public void mouseReleased(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger()) { JPopupMenu popup = new JPopupMenu(); JMenuItem redItem = new JMenuItem("Red"); redItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { list.setForeground(Color.RED); } }); popup.add(redItem); JMenuItem blueItem = new JMenuItem("Blue"); blueItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { list.setForeground(Color.BLUE); } }); popup.add(blueItem); popup.show(e.getComponent(), e.getX(), e.getY()); } } } public static void main(String[] args) { new MyFrame(); } } ``` 在这个程序,我们使用了JLabel、JTextField、JButton和JList组件来实现用户界面。我们使用了NumberOnlyDocument类来限制JTextField只能接受数字。当用户点“Add”按钮时,我们将JTextField的内容添加JList。当用户在JList选择一个选项时,我们将所选项的内容显示在JLabel。当用户JList时,我们一个菜单,让用户选择将JList的文本颜色设置为红色或蓝色。 运行程序后,您应该会看到一个JFrame,其包含一个JLabel、一个JTextField、一个JButton和一个JList组件,如下所示: ![JFrame](https://i.imgur.com/18JgJoa.png) 您可以在JTextField输入数字,并单“Add”按钮将其添加JList。您还可以在JList选择一个选项,在JLabel显示其内容。JList时,将一个菜单,您可以选择将JList的文本颜色设置为红色或蓝色。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值