27. oktober 2005 - 11:24
Der er
2 kommentarer og
1 løsning
Popup menu ved højreklik
Hej Experter
Jeg skal anvende en popupmenu, når man højreklikker på et objekt. Jeg er lidt i tvivl om den helt rigtige måde at gøre det på...Skal man tilføje en listener til hver enkelt menupunkt eller skal man tilføje en listener til det hele, som så forspørger om det selectedIndex, hvor efter man evaulere på dem.
Håber nogle kan give et lille eksempel, som evt også gemmer nogle af menupunkterne.
27. oktober 2005 - 22:18
#1
Et eksempel på hvordan det kan gøres med en JList. Ellers ved jeg ikke lige hvad du taler om, når du siger objekt :) ?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Popup extends JFrame implements ActionListener
{
private JList list = new JList(new DefaultListModel());
JPopupMenu popup;
public Popup()
{
this.setSize(300, 300);
this.getContentPane().add(list, BorderLayout.CENTER);
for (int i = 0; i<10; i++)
{
((DefaultListModel)list.getModel()).addElement("Test " + i);
}
buildMenu();
}
private void buildMenu()
{
popup = new JPopupMenu();
JMenuItem menuItem = new JMenuItem("Menu 1");
menuItem.addActionListener(this);
popup.add(menuItem);
MouseListener popupListener = new PopupListener();
list.addMouseListener(popupListener);
}
public void actionPerformed (ActionEvent e)
{
JOptionPane.showMessageDialog(this, "Du har valgt: " + list.getSelectedValue());
}
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())
{
int index = list.locationToIndex(e.getPoint());
if (index >= 0)
list.setSelectedIndex(index);
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
}
public static void main (String[] args)
{
new Popup().setVisible(true);
}
}