Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

2 réponses
Avatar
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

2 réponses

Avatar
jocelyn
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" a écrit dans le
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




Avatar
Vincent Cantin
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