"हमेशा शीर्ष पर" जावा के साथ विंडोज


85

जावा में, क्या कोई विंडो है जो "हमेशा शीर्ष पर" है चाहे उपयोगकर्ता स्विच किसी अन्य एप्लिकेशन पर केंद्रित हो? मैंने वेब खोजा है, और सभी समाधान देशी बाइंडिंग के साथ जेएनआई इंटरफ़ेस के कुछ प्रकार के लिए झुक गए हैं। सचमुच यह करने का एकमात्र तरीका नहीं हो सकता है? .. या यह है?

जवाबों:


159

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

वैकल्पिक शब्द

सक्रिय न होने पर भी विंडो शीर्ष पर रहती है


3
आपको लगता है कि "जावा एप्लिकेशन हमेशा शीर्ष पर" के लिए एक सरल खोज होगा, इसका जवाब होगा, लेकिन यह उसे नहीं मिल सका। धन्यवाद।
लैपली एंडरसन

46
अंदाज़ा लगाओ। अब यह करता है !! :) यह आपको यहाँ लाता है! google.com/search?&q=java+application+always+on+top
OscarRyz

यह सरल और भयानक है। मैं भी कुछ इस तरह की तलाश में था, लेकिन उन्हें नहीं पता था कि उन्होंने इसे जावा 1.5 में लागू किया है। पोस्ट करने का शुक्रिया।
कुशाल पौडयाल

2
दुर्भाग्य से यह मेरे लिए काम नहीं करता है जब एक वीडियो गेम जैसे पूर्ण स्क्रीन एप्लिकेशन को चला रहा है। किसी को भी उस स्थिति में शीर्ष पर मजबूर करने का एक तरीका पता है?
ड्रीम लेन

1
@Dream लेन मैं शायद एक नया सवाल पूछना चाहता हूँ
rogerdpack

11

अपने अवलोकन से मैंने पाया कि ऑल्वेज़ऑनटॉप विशेषाधिकार नवीनतम प्रक्रिया को दिया जाता है जो हमेशा शीर्ष पर रहने का अनुरोध करता है।

इसलिए, यदि आपके पास एक एप्लिकेशन है जो 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();}
    }

जब एक और विंडो शीर्ष पर आती है तो इसे फिर से झूठे और सच में सेट करना एक सरल कारण के लिए एक काम करने योग्य समाधान की तरह नहीं होता है - क्या होगा यदि दूसरा अनुप्रयोग एक ही काम करता है?
तर्जका

@Trejkaz खैर, यह एक मान्य बिंदु है। मैं अब स्विंग के संपर्क में नहीं हूं।
गुलाबीपन

यह पूरी तरह से मेरे उपयोग के मामले के लिए काम करता है! पहले इसे झूठी स्थापित करना महत्वपूर्ण था।
रोकोको

0

setFullScreenWindow का उपयोग न करें, बस स्क्रीन का आकार प्राप्त करें और फिर सेट करें, और सब कुछ ठीक हो जाएगा।


यह एक उत्तर या टिप्पणी है?
फेल साइंटिस्ट

@FailedScientist ने एक शानदार टिप्पणी की
clankill3r
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.