I want to disable the popup menu on the toolbars in the main window. How do I do that?
There is no canonical (or pretty) way to do this, but there is a hack you can do - it works in NetBeans 5.0, 5.5 and 6.x (and probably earlier versions but this wasn’t tested).
Create the following ModuleInstall
class (remember to add a reference to it in the module manifest, e.g.
OpenIDE-Module-Install: org/netbeans/modules/toolbarthing/Installer.class
If you are using 5.0’s update 1 of module development support or later, you can just use New File > NetBeans Plug-In Modules > Module Installer):
package org.netbeans.modules.toolbarthing;
import java.awt.Component;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JToolBar;
import org.openide.modules.ModuleInstall;
import org.openide.windows.WindowManager;
public class Installer extends ModuleInstall implements Runnable {
public void restored() {
WindowManager.getDefault().invokeWhenUIReady(this);
}
public void run() {
JToolBar[] tb = findToolbars();
for (int i = 0; i < tb.length; i++) {
processToolbar (tb[I]);
}
}
private JToolBar[] findToolbars() {
List l = new ArrayList();
JFrame jf = (JFrame) WindowManager.getDefault().getMainWindow();
findToolbars (jf.getContentPane(), l);
JToolBar[[ | ]] tb = (JToolBar[[ | ]]) l.toArray(new JToolBar[L.size()]);
return tb;
}
private void findToolbars(Component c, List l) {
if (c instanceof JToolBar) {
l.add(c);
} else if (c instanceof Container) {
Component[] cc = ((Container) c).getComponents();
for (int i=0; i < cc.length; i++) {
findToolbars(cc[I], l);
}
}
}
private void processToolbar (JToolBar bar) {
MouseListener[] ml = bar.getMouseListeners();
for (int i = 0; i < ml.length; i++) {
if (ml[I].getClass().getName().indexOf("PopupListener") >= 0) {
bar.removeMouseListener (ml[I]);
}
}
}
}
The above doesn’t seems to work in 6.9.1. This is another similar module installer hack to achieve this:
public class Installer extends ModuleInstall
{
public void restored()
{
removeToolbarPopupMenu();
}
private void removeToolbarPopupMenu()
{
WindowManager.getDefault().invokeWhenUIReady(
new Runnable()
{
@Override
public void run()
{
removeAllPopupListeners(ToolbarPool.getDefault());
}
});
}
private static void removeAllPopupListeners(Component c)
{
if(c instanceof Container)
{
for(Component c2 : ((Container)c).getComponents())
{
for(MouseListener l : c2.getMouseListeners())
{
if(l.getClass().getName().contains("PopupListener"))
{
c2.removeMouseListener(l);
// Uncomment to obtain a similar console output
// Removing: org.openide.awt.ToolbarPool$PopupListener@1535ac from javax.swing.JPanel[...]
// Removing: org.openide.awt.ToolbarPool$PopupListener@1535ac from org.openide.awt.Toolbar[File,...]
//System.out.println("Removing: " + l + " from " + c2);
}
}
findToolbars(c2);
}
}
}
}