Renklendirilmemiş alwaysOnTop çerçevesinde bir araç çubuğu oluşturmaya çalışıyorum. Bu yüzden, çerçevemin ana çerçevemin üstünde olmasını, ancak diğer programların kareleri üzerinde olmamasını istiyorum. Bu kodu çalıştı:Çerçeve her zaman programımın en üstündedir
public class Test {
private static JFrame mainFrame;
/**
* @param args the command line arguments
*/
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);
}
}
}
Ama JDialog kullanımı ve sahibi, diğer uygulamaların üstünde çerçeve kalmak precising rağmen (en azından Ubuntu ile Belki sonucun diğer OS ile farklıdır.?)
DÜZENLEME: Tamam, benim iletişim için bu kodu çalıştı :
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) {
// A.this.setAlwaysOnTop(false);
A.this.toBack();
}
});
}
}
sorun şimdi ana pencere gevşek odak, iletişim geri odağı çalıyor ve ne zaman anlamak kalmamasıdır. Örneğin, uygulamamı çalıştırıyorum, Firefox'a geçmeye çalışıyorum, Firefox görünür ve mainFrame'i kapatır, ancak A iletişim kutusu odağı alır ve ekranda kalır. Şimdi, Firefox'u tekrar seçersem, iletişim kutusu en sonunda düzgün bir şekilde ortadan kalkar. Diyaloğun odağı neden aldığını açıklayabilir misin?
Teşekkür
/JNA – MadProgrammer
A sınıfı JFrame'i uzatıyor mu? –
'setAlwaysOnTop()' öğesini kaldırırsanız ne olur? Normalde Frame, diğer karelerin üstünde kalmalıdır. SetAlwaysOnTop() 'OS – GameDroids