I am trying to create a kind of toolbar in an unecorated alwaysOnTop frame. Thus, I want my frame to be on top of my main frame, but not on top of frames from other programs. I tried this code:
public class Test { private static JFrame mainFrame; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { mainFrame = new JFrame("test"); mainFrame.setSize(800,600); mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); mainFrame.setVisible(true); A a = new A(); } }); } public static class A extends JDialog { public A() { super(mainFrame); setAlwaysOnTop(true); setFocusable(false); setSize(80,60); setVisible(true); } } }
But despite using JDialog and limiting the owner, the frame remains on top of other applications (at least with Ubuntu. Maybe the result is different from other OS?)
EDIT : Ok, I tried this code for my dialog:
public static class A extends JDialog { public A(String name) { super(mainFrame, name); setAlwaysOnTop(true); setFocusable(false); setSize(80, 60); setVisible(true); mainFrame.addWindowListener(new WindowAdapter() { @Override public void windowActivated(WindowEvent e) { A.this.setAlwaysOnTop(true); } @Override public void windowDeactivated(WindowEvent e) {
Now the problem is that when the main window expands, the dialog box focuses backward, and I don’t understand why. For example, I launch my application, I try to switch to Firefox, Firefox appears and closes mainFrame, but dialog A focuses and remains on the screen. Now, if I select Firefox again, the dialog will finally disappear. Could you explain to me why the dialogue focuses?
thanks
java swing always-on-top
Sharcoux
source share