Comment ouvrir un JPopupMenu sur l'onglet d'un panel de JTabbedPane ?

Le
Vincent Cantin
Bonjour,

Je cherche a ouvrir un JPopupMenu sur l'onglet d'un panel de JTabbedPane,
mais je ne sais pas comment ecouter les evenements de la souris sur l'onglet
du panel. C'est un peu embetant, dans mon menu j'ai une action pour enlever
le panel, et pour l'instant l'utilisateur doit cliquer dans le panel plutot
que sur l'onglet pour ouvrir le menu.

Quelqu'un sait comment faire ?

Merci,
Vincent
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
jocelyn
Le #713065
Salut Vincent,

Apres une recherche dans les forums java, j'ai trouvé une solution qui
marche avec les versions 1.3 et 1.4 (j'ai testé).
D'abord le lien qui va bien:
http://forum.java.sun.com/thread.jsp?forumW&thread5690
Ensuite la démo que j'ai faite à partir de ca:


import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTabbedPane;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;

public class TabbedPaneDemo extends JPanel {
public TabbedPaneDemo() {
JTabbedPane tabbedPane = new JTabbedPane();
addListenerToPane(tabbedPane);
Component panel1 = makeTextPanel("Blah");
tabbedPane.addTab("One", null, panel1, "Does nothing");
tabbedPane.setSelectedIndex(0);
Component panel2 = makeTextPanel("Blah blah");
tabbedPane.addTab("Two", null, panel2, "Does twice as much nothing");
Component panel3 = makeTextPanel("Blah blah blah");
tabbedPane.addTab("Three", null, panel3, "Still does nothing");
Component panel4 = makeTextPanel("Blah blah blah blah");
tabbedPane.addTab("Four", null, panel4, "Does nothing at all");

file://Add the tabbed pane to this panel.
setLayout(new GridLayout(1, 1));
add(tabbedPane);
}

private void addListenerToPane(final JTabbedPane tabbed) {
tabbed.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
maybeShowPopup(me);
}
public void mouseReleased(MouseEvent me) {
maybeShowPopup(me);
}
});
}

protected Component makeTextPanel(String text) {
JPanel panel = new JPanel(false);
JLabel filler = new JLabel(text);
filler.setHorizontalAlignment(JLabel.CENTER);
panel.setLayout(new GridLayout(1, 1));
panel.add(filler);
return panel;
}

public static void main(String[] args) {
JFrame frame = new JFrame("TabbedPaneDemo");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add(new TabbedPaneDemo(),
BorderLayout.CENTER);
frame.setSize(400, 125);
frame.setVisible(true);
}

private void maybeShowPopup(final MouseEvent me) {
if (me.isPopupTrigger()) {
final JTabbedPane tabbed = (JTabbedPane) me.getSource();
int index = tabbed.getUI().tabForCoordinate(tabbed, me.getX(),
me.getY());
if (index != -1) {
JPopupMenu popup = new JPopupMenu();
JMenuItem item = new JMenuItem("Close");
popup.add(item);
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int i = tabbed.getSelectedIndex();
tabbed.remove(i);
}
});
popup.show(me.getComponent(), me.getX(), me.getY());
}
}
}
}



Salut !

--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même

"Vincent Cantin" message news:
Bonjour,

Je cherche a ouvrir un JPopupMenu sur l'onglet d'un panel de JTabbedPane,
mais je ne sais pas comment ecouter les evenements de la souris sur
l'onglet

du panel. C'est un peu embetant, dans mon menu j'ai une action pour
enlever

le panel, et pour l'instant l'utilisateur doit cliquer dans le panel
plutot

que sur l'onglet pour ouvrir le menu.

Quelqu'un sait comment faire ?

Merci,
Vincent




Vincent Cantin
Le #713062
Apres une recherche dans les forums java, j'ai trouv?une solution qui
marche avec les versions 1.3 et 1.4 (j'ai test?.
D'abord le lien qui va bien:
http://forum.java.sun.com/thread.jsp?forumW&thread5690
Ensuite la démo que j'ai faite ?partir de ca:


Merci beaucoup Jocelyn.

Vincent

Poster une réponse
Anonyme