In one of my projects, I needed to present a radar (polar) plot. Such plots are usually drawn on a black background and I wanted all the plot controls to blend into this background.

Matlab figure having black toolbar background
For the plot itself I used a variation of Matlab’s buggy polar function, which I modified to enable proper dynamic resize / zoom / pan, bypass figure-renderer issues with patches and data-cursors, and other similar annoyances. Pretty standard stuff.
For the slider I’ve used a javax.swing.JSlider
having a continuous-movement callback. Again, for readers of this blog this is nothing special:
[jSlider,hSlider] = javacomponent('javax.swing.JSlider',[0,0,.01,0.1],hFig); set(hSlider, 'Units','norm','pos',[.15,0,.7,.05]); set(jSlider, 'Background',java.awt.Color.black, ... 'Value',0, 'Maximum',duration, ... 'StateChangedCallback',{@cbSlider,hFig,axPlayback});
Setting the background color for all the GUI components to black was easy. But setting the toolbar’s background to black turned out to be a bit more interesting, and is the topic of this week’s article.

Standard Matlab figure toolbar - yuck!
The first step, naturally, is to get the toolbar’s handle:
hToolbar = findall(hFig,'tag','FigureToolBar');
In my case, I programmatically create the figure and use the default figure toolbar, whose tag value is always ‘FigureToolBar’. If I had used a custom toolbar, I would naturally use the corresponding tag (for example, if you create a custom toolbar using GUIDE, then the tag name will probably be ‘toolbar1′ or something similar).
Since I’m setting the figure programmatically, I need to manually remove several unuseful toolbar controls. I do this by directly accessing the toolbar control handles:
delete(findall(hToolbar,'tag','Plottools.PlottoolsOn')) delete(findall(hToolbar,'tag','Plottools.PlottoolsOff')) delete(findall(hToolbar,'tag','Annotation.InsertColorbar')) delete(findall(hToolbar,'tag','DataManager.Linking')) delete(findall(hToolbar,'tag','Standard.EditPlot'))
For setting the bgcolor, we get the toolbar’s underlying Java component, then sprinkle some Java magic power:
% ensure the toolbar is visible onscreen drawnow; % Get the underlying JToolBar component jToolbar = get(get(hToolbar,'JavaContainer'),'ComponentPeer'); % Set the bgcolor to black color = java.awt.Color.black; jToolbar.setBackground(color); jToolbar.getParent.getParent.setBackground(color); % Remove the toolbar border, to blend into figure contents jToolbar.setBorderPainted(false); % Remove the separator line between toolbar and contents jFrame = get(handle(hFig),'JavaFrame'); jFrame.showTopSeparator(false);
Unfortunately, this is not enough. The reason is that some of Matlab’s standard toolbar icons use non-opaque Java button controls (thereby showing the new black bgcolor), whereas other icons use opaque buttons, with a hard-coded gray background (I feel like spanking someone…). I’ve already touched upon this issue briefly a few years ago.

Matlab figure toolbar with black background, some opaque buttons
Luckily, all is not lost: we simply need to loop over all the JToolBar’s components and force them to be non-opaque with a black bgcolor. In cases where the component is compound (e.g., the Brush Data uisplittool), we need to set the bgcolor for all the sub-components:
jtbc = jToolbar.getComponents; for idx=1:length(jtbc) jtbc(idx).setOpaque(false); jtbc(idx).setBackground(color); for childIdx = 1 : length(jtbc(idx).getComponents) jtbc(idx).getComponent(childIdx-1).setBackground(color); end end
…finally ending up with the blended appearance that appears at the top of this article.
Related posts:
- Customizing the standard figure toolbar, menubar The standard figure toolbar and menubar can easily be modified to include a list of recently-used files....
- Figure toolbar components Matlab's toolbars can be customized using a combination of undocumented Matlab and Java hacks. This article describes how to access existing toolbar icons and how to add non-button toolbar components....
- Figure toolbar customizations Matlab's toolbars can be customized using a combination of undocumented Matlab and Java hacks. This article describes how to customize the Matlab figure toolbar....
- Javacomponent background color This article explains how to align Java component background color with a Matlab color....