Soru “Always on Top” Java ile Windows


Java'da, kullanıcı odağı başka bir uygulamaya geçirirse, "Her zaman üstte" olan bir pencereye sahip olmanın bir yolu var mı? Web'de arama yaptım ve tüm çözümler yerel bağlamalarla bir çeşit JNI arayüzüne yöneldi. Gerçekten bunu yapmanın tek yolu bu olamaz mı? .. ya da öyle mi?


76
2017-11-18 05:37


Menşei




Cevaplar:


Bu yöntemin Window sınıf:

Window.setAlwaysOnTop (boolean)

Windows Görev Yöneticisi'nde varsayılan olarak aynı şekilde çalışır: başka bir uygulamaya geçin ancak her zaman üstte gösterir.

Bu Java 1.5'e eklendi

Basit kod:

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Annoying {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Hello!!");

        // Set's the window to be "always on top"
        frame.setAlwaysOnTop( true );

        frame.setLocationByPlatform( true );
        frame.add( new JLabel("  Isn't this annoying?") );
        frame.pack();
        frame.setVisible( true );
    }
}

alt text

Aktif olmadığında pencere üstte kalır


139
2017-11-18 05:46



"java uygulaması her zaman zirvede" için basit bir arama yapmayı düşünürdünüz, ama bu cevap bulamadı. Teşekkürler. - Laplie Anderson
Bil bakalım ne oldu. Şimdi öyle! :) Seni buraya getiriyor! google.com/search?&q=java+application+always+on+top - OscarRyz
Bu basit ve harika. Ben de böyle bir şey arıyordum, ama bunu Java 1.5'de uyguladıklarını bilmiyordum. Mesaj için teşekkürler. - Kushal Paudyal
Ne yazık ki bu, video oyunu gibi bir tam ekran uygulamasını çalıştırırken benim için çalışmaz. Herkes bu durumda en tepeye zorlamak için bir yol biliyor mu? - Dream Lane
@Dream lane Muhtemelen yeni bir soru olarak sorardım - rogerdpack


Gözlemden, AlwaysOnTop ayrıcalığının her zaman en üstte olmasını talep eden en son sürece verildiğini gördüm.

Yani, setAlwaysOnTop(true) ve daha sonra başka bir uygulama bu seçeneği kullanır, ikinci uygulamaya ayrıcalık verilir. Bunun etrafında çalışmak için setAlwaysOnTop(false) ve yeniden setAlwaysOnTop(true) Mevcut pencerenin üstüne herhangi bir pencere geldiğinde.

Kontrol ettim wordweb içinde windows. WordWeb kullanan uygulamalardan biridir AlwaysOnTop seçeneğinden OS

Oyun senaryosunda düzgün çalışıp çalışmadığından emin değilim.

Uyarı: Yan etkilerin farkında değilim.

İşte kod örneği:

import java.awt.event.*;

import javax.swing.*;

public class MainWindow extends JFrame implements WindowFocusListener
{
    public MainWindow()
    {
        addWindowFocusListener(this);
        setAlwaysOnTop(true);
        this.setFocusable(true);
       // this.setFocusableWindowState(true);
        panel = new JPanel();
        //setSize(WIDTH,HEIGHT);
        setUndecorated(true);
        setLocation(X,Y);
        setExtendedState(MAXIMIZED_BOTH);
        setVisible(true);
    }

    public void windowGainedFocus(WindowEvent e){}
    public void windowLostFocus(WindowEvent e)
    {
        if(e.getNewState()!=e.WINDOW_CLOSED){
            //toFront();
            //requestFocus();
            setAlwaysOnTop(false);
            setAlwaysOnTop(true);
            //requestFocusInWindow();
            System.out.println("focus lost");
        }

    }

    private JPanel panel;
    private static final int WIDTH = 200;
    private static final int HEIGHT = 200;
    private static final int X = 100;
    private static final int Y = 100;

    public static void main(String args[]){
              new MainWindow();}
    }

10
2018-01-04 16:15



Başka bir pencere üst üste geldiğinde onu yanlış ve doğru olarak ayarlamak, basit bir nedenden ötürü uygulanabilir bir çözüm gibi gelmiyor - diğer uygulama aynı şeyi yapıyorsa ne olur? - Trejkaz
@Trejkaz Peki, bu geçerli bir nokta. Artık salıncakla artık temas halinde değilim. - pinkpanther
Bu benim kullanım durumum için mükemmel çalışıyor! Yanlış olana ilk olarak ayarlamak anahtardır. - rococo


setFullScreenWindow'u kullanmayın, sadece ekran boyutunu ve setSize'i alın ve her şey iyi olacak.


0
2017-07-22 03:11



Bir cevap mı, yorum mu? - Failed Scientist