पूर्ण स्क्रीन जावा में JFrame


110

मैं जल्द ही एक प्रोजेक्ट करूंगा और मुझे इसका इस्तेमाल करना होगा फुल स्क्रीन मोड का इस्तेमाल करना होगा।

यह खिड़की में कुछ ग्राफिक्स आकर्षित करेगा। अगर मैं JFrame या कुछ इसी तरह का उपयोग करूं तो यह बहुत अच्छा होगा ।

मुझे नहीं पता कि स्क्रीन का अंतिम रिज़ॉल्यूशन क्या होगा। कृपया मुझे बताएं कि क्या ग्राफिक्स स्वचालित रूप से फिर से शुरू हो जाएगा?

JFrame jf = new JFrame();
jf.setSize(1650,1080);
//make it fullscreen;
//now is everything is going to be rescaled so it looks like the original?

आपको "पूर्ण स्क्रीन" को परिभाषित करने की आवश्यकता है। नीचे दिए गए उत्तरों के साथ, आप विचार कर सकते हैं कि फ्रेम को सजाया जाना चाहिए या नहीं (यह शीर्षक बार और सीमाओं को शामिल करता है)। जब तक आप कस्टम पेंटिंग नहीं कर रहे हैं, तब तक rescaling नहीं होगा। यदि आप सामान्य स्विंग घटकों और लेआउट प्रबंधकों का उपयोग कर रहे हैं, तो आपको यह पता लगाना चाहिए कि लेआउट नए स्क्रीन रिज़ॉल्यूशन को समायोजित करता है। बेशक आप इसका परीक्षण करना चाहते हैं;)
मैड्रोमग्राम

क्या आप लायन फुलस्क्रीन का उपयोग करना चाहते हैं?
LanguageNamedAfterCofee

जवाबों:


206

जोड़ें:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
frame.setUndecorated(true);
frame.setVisible(true);

52
इसके अलावा frame.setUndecorated(true);यह वास्तव में पूर्ण स्क्रीन बना देगा।
योदा

यदि आप जीएनयू / लिनक्स का उपयोग कर रहे हैं, तो आपको एक नया डिस्प्ले मोड सेट करते समय DisplayMode.BIT_DEPTH_MULTIऔर सेट करने की आवश्यकता हो सकती DisplayMode.REFRESH_RATE_UNKNOWNहै। मुझे इस्तेमाल नहीं करना था setExtendedState। जावा 8. के ​​साथ
कुबंटु

मैं जावा 8 का उपयोग कर रहा हूं, मेरे लिए अघोषित अपवाद फेंक रहा है और जब मैंने अघोषित को हटा दिया, तो कोड ठीक काम करता है और साथ ही फ्रेम को पूर्ण स्क्रीन भी बनाया है।
शीलू

मैं आपको त्रुटि और कारण बताऊंगा। मैंने एक AppFrame वर्ग (कुछ डिफ़ॉल्ट गुणों के साथ) बनाया और किसी भी वर्ग को JFrame के रूप में बनाने के लिए मैंने इसे केवल विस्तारित किया। यह सच के रूप में अदृश्य है। अब तीन लाइनों के ऊपर एक ही क्रम में होना चाहिए, अगर दृश्यमान विस्तारितस्ट्रेट से पहले है तो आपको नीचे त्रुटि मिलेगी। जब मैंने आर्डर एरर को सही किया और आपको JFrame मिला जिसका कोई टाइटल बार नहीं था .........Exception in thread "main" java.awt.IllegalComponentStateException: The frame is displayable. at java.awt.Frame.setUndecorated(Frame.java:923)
शिलू


39

यदि आप अपना फ़्रेम फ़ुल-स्क्रीन मोड (जैसे फ़ुल-स्क्रीन में किसी मूवी) में रखना चाहते हैं, तो इन उत्तरों की जाँच करें।

कक्षाएं java.awt.GraphicsEnvironmentऔर java.awt.GraphicsDeviceएक स्क्रीन (पूर्णविराम) पर पूर्ण-स्क्रीन मोड में एप्लिकेशन डालने के लिए उपयोग की जाती हैं।

उदाहरण के लिए:

static GraphicsDevice device = GraphicsEnvironment
        .getLocalGraphicsEnvironment().getScreenDevices()[0];

public static void main(String[] args) {

    final JFrame frame = new JFrame("Display Mode");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setUndecorated(true);

    JButton btn1 = new JButton("Full-Screen");
    btn1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            device.setFullScreenWindow(frame);
        }
    });
    JButton btn2 = new JButton("Normal");
    btn2.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            device.setFullScreenWindow(null);
        }
    });

    JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    panel.add(btn1);
    panel.add(btn2);
    frame.add(panel);

    frame.pack();
    frame.setVisible(true);

}

@ पाओल वर्गास: आप एक अघोषित खिड़की पर एक मेनू बार भी जोड़ सकते हैं। छोड़ने के लिए, अपने उदाहरण में, आपको "alt + F4" टाइप करना होगा।
कार्डमैन


7

एक तरीका विस्तारित राज्य का उपयोग करना है। यह अंतर्निहित OS को JFrame को अधिकतम करने के लिए कहता है।

setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);

अन्य दृष्टिकोण आपकी आवश्यकता के लिए स्क्रीन को मैन्युअल रूप से अधिकतम करने के लिए होगा।

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight());
setLocationRelativeTo(null);

लेकिन यह उबंटू ओएस में नुकसान है। मुझे जो काम मिला, वह यही था।

if (SystemHelper.isUnix()) {
    getContentPane().setPreferredSize(
    Toolkit.getDefaultToolkit().getScreenSize());
    pack();
    setResizable(false);
    show();

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            Point p = new Point(0, 0);
            SwingUtilities.convertPointToScreen(p, getContentPane());
            Point l = getLocation();
            l.x -= p.x;
            l.y -= p.y;
            setLocation(p);
        }
    });
}

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight());
setLocationRelativeTo(null);

फेडोरा में उपरोक्त समस्या मौजूद नहीं है। लेकिन ग्नोम या केडीई से जुड़ी जटिलताएं हैं । तो बेहतर है सावधान रहें। उम्मीद है की यह मदद करेगा।


6

सबसे आसान कभी:

for ( Window w : Window.getWindows() ) {
    GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow( w );
}

अंतर विश्वास frame.setExtendedState(JFrame.MAXIMIZED_BOTH);और आपके समाधान क्या है?
योदा

आपको अपने समाधान के लिए एक फ्रेम रखना होगा। जबकि मेरे लिए आप नहीं है और यह स्वचालित रूप से कार्यक्रम में सभी खिड़कियों के माध्यम से लूप करेगा
एरियल टेराानी

बहुत बढ़िया। यह फिक्स macOS के लिए और भी बेहतर काम करता है, क्योंकि दूसरा फिक्स अभी भी मेनू बार को दिखाई देगा। यह फिक्स पूरी तरह से सब कुछ छुपाता है। यह स्वीकृत उत्तर होना चाहिए।
पनयोटिस

5

बस इस कोड का उपयोग करें:

import java.awt.event.*;
import javax.swing.*;

public class FullscreenJFrame extends JFrame {
    private JPanel contentPane = new JPanel();
    private JButton fullscreenButton = new JButton("Fullscreen Mode");
    private boolean Am_I_In_FullScreen = false;
    private int PrevX, PrevY, PrevWidth, PrevHeight;

    public static void main(String[] args) {
        FullscreenJFrame frame = new FullscreenJFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 500);
        frame.setVisible(true);
    }

    public FullscreenJFrame() {
        super("My FullscreenJFrame");

        setContentPane(contentPane);

        // From Here starts the trick
        FullScreenEffect effect = new FullScreenEffect();

        fullscreenButton.addActionListener(effect);

        contentPane.add(fullscreenButton);
        fullscreenButton.setVisible(true);
    }

    private class FullScreenEffect implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            if (Am_I_In_FullScreen == false) {
                PrevX = getX();
                PrevY = getY();
                PrevWidth = getWidth();
                PrevHeight = getHeight();

                // Destroys the whole JFrame but keeps organized every Component
                // Needed if you want to use Undecorated JFrame dispose() is the
                // reason that this trick doesn't work with videos.
                dispose();
                setUndecorated(true);

                setBounds(0, 0, getToolkit().getScreenSize().width,
                        getToolkit().getScreenSize().height);
                setVisible(true);
                Am_I_In_FullScreen = true;
            } else {
                setVisible(true);
                setBounds(PrevX, PrevY, PrevWidth, PrevHeight);
                dispose();
                setUndecorated(false);
                setVisible(true);
                Am_I_In_FullScreen = false;
            }
        }
    }
}

आशा है कि ये आपकी मदद करेगा।


2

यह आपको फ़्रेम के तुरंत अपने ऑब्जेक्ट का उपयोग करने में मदद करेगा

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);


2

सबसे पहले, यह वह संकल्प है जिसका आप उपयोग करना चाहते हैं, 1650,1080 ,।

अब जोड़ें:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

यदि आपके पास JFrame पर घटकों के साथ समस्या है, तो आपके द्वारा frame.add(component)विधि का उपयोग करने वाले सभी घटकों को जोड़ने के बाद, निम्न कथन जोड़ें।

frame.pack();

1
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));

यह सिर्फ फ्रेम को स्क्रीन का आकार बनाता है


1

आप गुण उपकरण का उपयोग कर सकते हैं।
अपने JFrame के लिए 2 गुण सेट करें :

extendedState 6
resizeable    true

0

आपको केवल इसकी आवश्यकता है:

JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

जब आप MAXIMIZED_BOTH संशोधक का उपयोग करते हैं, तो यह पूरे विंडो (ऊँचाई और चौड़ाई) पर अधिकतम होगा।

इसका उपयोग करने वाले कुछ सुझाव हैं:

frame.setUndecorated(true);

मैं इसकी अनुशंसा नहीं करूंगा, क्योंकि आपकी विंडो में हेडर नहीं होगा, इस प्रकार कोई क्लोज़ / रिस्टोर / मिनिमम बटन नहीं होगा।


0

मान पर प्रकाश डाला गया कि मेरा मतलब है:

JFrame - गुण


हालांकि यह चित्र स्पष्ट रूप से एक उत्तर प्रदान कर सकता है, कृपया अपने उत्तर को कुछ स्पष्टीकरण के साथ विस्तृत करने का प्रयास करें। imho, हालांकि, चूंकि आपका उत्तर वास्तव में मौजूदा के समान ही है, कृपया ध्यान से सोचें कि क्या आप वास्तव में विस्तृत करना चाहते हैं और इस उत्तर को रखना चाहते हैं या नहीं।
योहनस खोसियावन o

-1

नीचे 2 गुण सेट करें:

  1. ExtendedState = 6
  2. resizeable = सत्य

इससे मेरा काम बनता है।


2
अंतिम आँकड़े एक कारण के लिए वहाँ हैं।
योदा

हम्म्म्म ... नेटबीन्स 8.0.1 में मैं "रेसिजेबल" + "रेजिजेबल" प्रॉपर्टीज (प्रॉपर्टीज विंडो) के मूल्यों के लिए JFrame सेट कर सकता हूं
रुडी विजया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.