1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
/*
* Jean-Francois Fourmond, Christophe Le Besnerais
*
* INSU (Institut National des Sciences de l'Univers)
* RAP (Réseau Accelerometrique Permanent)
*/
package fr.ujfgrenoble.obs.lgit.bdsis.carto.client.ui;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.SystemColor;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
/**
* Un popupMenu avec une barre de scroll si il y a trop d'éléments
* @see JScrollPopupMenu#addItem(JButton)
* @author Jean-Francois Fourmond, Christophe Le Besnerais
*/
public class JScrollPopupMenu extends JPopupMenu {
/**
* couleur des élémnts quand la souris est dessus
*/
protected static final Color ROLLOVER_COLOR = new Color(156, 153, 205);
/**
* couleur des éléments quand la souris n'est pas dessus
*/
protected static final Color BACKGROUND_COLOR = SystemColor.menu;
/**
* barre de défilement
*/
private JScrollPane jScrollPane = null;
/**
* contient les boutons
*/
private JPanel jPanel = null;
/**
* le nombre de boutons ajoutés
*/
private int nbItem = 0;
/**
* This is the default constructor
*/
public JScrollPopupMenu() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
this.add(getJScrollPane());
}
/**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(getJPanel());
}
return jScrollPane;
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel() {
if (jPanel == null) {
jPanel = new JPanel();
jPanel.setLayout(new GridLayout(0, 1, 1, 1));
jPanel.setBackground(BACKGROUND_COLOR);
}
return jPanel;
}
/**
* Ajoute un bouton dans le menu déroulant
* @param b le bouton
*/
public void addItem(JButton b) {
b.setPreferredSize(new Dimension(60, 15));
b.setSize(60, 15);
b.setMargin(new Insets(2, 2, 2, 2));
b.setFocusPainted(false);
b.setBorderPainted(false);
b.setBackground(BACKGROUND_COLOR);
b.setHorizontalAlignment(SwingConstants.LEFT);
b.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
b.addMouseListener(new java.awt.event.MouseAdapter() {
// gestion des couleurs quand la souris passe sur le bouton :
public void mouseEntered(java.awt.event.MouseEvent e) {
e.getComponent().setBackground(ROLLOVER_COLOR);
}
public void mouseExited(java.awt.event.MouseEvent e) {
e.getComponent().setBackground(BACKGROUND_COLOR);
}
// pour cacher le menu :
public void mouseClicked(java.awt.event.MouseEvent e) {
JScrollPopupMenu.this.setVisible(false);
}
});
this.getJPanel().add(b);
nbItem++;
// la taille dépend du nombre d'item :
if (nbItem > 10) {
this.setPreferredSize(new java.awt.Dimension(90, 150));
} else if (nbItem == 1) {
this.setPreferredSize(new java.awt.Dimension(75, 23));
} else if (nbItem == 2) {
this.setPreferredSize(new java.awt.Dimension(75, 40));
} else {
this.setPreferredSize(new java.awt.Dimension(75, 19 * nbItem));
}
}
/**
* Utiliser plutôt à la place la méthode <code>addItem(JButton b)</code>
* @see JScrollPopupMenu#addItem(JButton)
*/
public JMenuItem add(JMenuItem menuItem) {
return super.add(menuItem);
}
/**
* Utiliser plutôt à la place la méthode <code>addItem(JButton b)</code>
* @see JScrollPopupMenu#addItem(JButton)
*/
public JMenuItem add(String s) {
return super.add(s);
}
} |
Partager