سؤال

في Java، هل هناك طريقة للحصول على نافذة "في المقدمة دائمًا" بغض النظر عما إذا كان المستخدم يحول التركيز إلى تطبيق آخر؟لقد بحثت في الويب، وكل الحلول تميل إلى نوع ما من واجهة JNI مع الارتباطات الأصلية.حقا لا يمكن أن تكون هذه هي الطريقة الوحيدة للقيام بذلك؟ ..أو هو؟

هل كانت مفيدة؟

المحلول

جرب هذا الأسلوب من الطبقة Window:

Window.setAlwaysOnTop ( منطقية)

ويعمل بنفس الطريقة التي يعامل بها الافتراضي في ويندوز يبرد: التبديل إلى تطبيق آخر لكنه يظهر دائما على رأس

.

وتمت إضافة هذا في جاوة 1.5

ونموذج التعليمات البرمجية:

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 );
    }
}

<الفرعية> نافذة لا تزال على رأس حتى عندما غير نشطة

نصائح أخرى

من خلال ملاحظتي وجدت أن امتياز AlwaysOnTop يُمنح لأحدث عملية تطلب أن تكون دائمًا في المقدمة.

لذلك، إذا كان لديك التطبيق الذي setAlwaysOnTop(true) وبعد ذلك يستخدم تطبيق آخر هذا الخيار، ويتم منح الامتياز للتطبيق الثاني.من أجل التغلب على هذا قمت بتعيين setAlwaysOnTop(false) ومره اخرى setAlwaysOnTop(true) كلما ظهرت أي نافذة أعلى النافذة الحالية.

لقد راجعت ذلك مع wordweb في windows.يعد WordWeb أحد التطبيقات التي تستخدم AlwaysOnTop الخيار من OS

لست متأكدًا مما إذا كان يعمل بشكل صحيح مع سيناريو لعبتك.

تحذير:لست على علم بالآثار الجانبية.

هنا هو مثال التعليمات البرمجية:

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();}
    }

ولا استخدام setFullScreenWindow، مجرد الحصول على حجم الشاشة ثم setSize، وكل شيء سيكون على ما يرام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top