In a JFrame or JDialog you can always overwrite the setVisible() method, it works well. I haven't tried in a JPanel, but can be an alternative.
@Override
public void setVisible(boolean value) {
super.setVisible(value);
control.requestFocusInWindow();
}