Sample code to reproduce the problem:
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
/**
* Test frame focus
*/
public class FrameFocusTest extends JFrame {
public static void main(String[] args) {
System.setProperty("apple.laf.useScreenMenuBar", "true");
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame lFrame = new FrameFocusTest();
lFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lFrame.setSize(300, 200);
// Center frame
lFrame.setLocationRelativeTo(null);
lFrame.setVisible(true);
}
});
}
/**
* Default constructor
*/
public FrameFocusTest() {
setTitle("Testing Frame Focus");
addMenus();
final JLabel lLblFocus = new JLabel("Focussed");
lLblFocus.setHorizontalAlignment(SwingConstants.CENTER);
lLblFocus.setOpaque(false);
JPanel lContentPane = new JPanel(new BorderLayout()) {
@Override
protected void paintComponent(Graphics g) {
if (isOpaque()) {
g.setColor(isFocused() ? Color.RED : Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
}
super.paintComponents(g);
}
};
lContentPane.setOpaque(true);
lContentPane.add(lLblFocus);
setContentPane(lContentPane);
/**
* Draw focus change
*/
addWindowFocusListener(new WindowFocusListener() {
public void windowGainedFocus(WindowEvent e) {
lLblFocus.setText("Focussed");
// Repaint background
repaint();
}
public void windowLostFocus(WindowEvent e) {
lLblFocus.setText("Not Focussed");
// Repaint background
repaint();
}
});
}
/**
* Dummy menu
*/
public void addMenus() {
JMenuBar lMainMenuBar = new JMenuBar();
JMenu lHelpMenu = new JMenu("Help");
lMainMenuBar.add(lHelpMenu);
lHelpMenu.add(new JMenuItem("Online Documentation"));
lHelpMenu.add(new JMenuItem("Technical Support"));
setJMenuBar(lMainMenuBar);
}
}