سؤال

لقد كنت أحاول وفشل في استخدام وضع الشاشة الكامل Java على العرض الأساسي لنظام OSX. كل ما جربته، لا أستطيع أن أتخلص من شريط القائمة "Apple" من أعلى الشاشة. أنا حقا بحاجة إلى الطلاء على الشاشة بأكملها. هل يمكن لأحد أن يقول لي كيف تتخلص من القائمة؟

لقد أرفقت فئة مثالية تظهر المشكلة - على نظامي، لا تزال القائمة مرئية حيث أتوقع أن أرى شاشة فارغة تماما.

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

public class FullScreenFrame extends JFrame implements KeyListener {

    public FullScreenFrame () {
        addKeyListener(this);
        setUndecorated(true);
        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

        if (gd.isFullScreenSupported()) {
            try {
                gd.setFullScreenWindow(this);
            }
            finally {
                gd.setFullScreenWindow(null);
            }
        }
        else {
            System.err.println("Full screen not supported");
        }

        setVisible(true);
    }

    public void keyTyped(KeyEvent e) {}
    public void keyPressed(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {
        setVisible(false);
        dispose();
    }

    public static void main (String [] args) {
        new FullScreenFrame();
    }
}
هل كانت مفيدة؟

المحلول

أعتقد أن مشكلتك موجودة هنا:

try {
        gd.setFullScreenWindow(this);
}
finally {
        gd.setFullScreenWindow(null);
}

finally يتم تنفيذ الكتل دائما، إذن ما يحدث هنا هو أن نافذة تصبح ملء الشاشة لحظة موجزة (إذا كان ذلك) ثم تتخلى عن الشاشة على الفور.

أيضا، setVisible(true) ليس من الضروري عند دعوت سابقا setFullScreenWindow(this), ، بحسب ال جافادوكس.

لذلك أود أن أغير المنشئ إلى هذا:

public FullScreenFrame() {
    addKeyListener(this);

    GraphicsDevice gd =
            GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

    if (gd.isFullScreenSupported()) {
        setUndecorated(true);
        gd.setFullScreenWindow(this);
    } else {
        System.err.println("Full screen not supported");
        setSize(100, 100); // just something to let you see the window
        setVisible(true);
    }
}

نصائح أخرى

على نظام التشغيل X (10.7 و أعلى)، فمن الأفضل استخدام وضع ملء الشاشة الأصلي المتاحة. يجب عليك استخدام:

com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window,true);
com.apple.eawt.Application.getApplication().requestToggleFullScreen(window);

أين window هي النافذة (JFrame, ، إلخ) أنك تريد أن تأخذ ملء الشاشة

هذا محذني بعض الشيء، تتمثل الإجابة في اتباع البرنامج التعليمي تماما، والتي لها أساسيات وهي أكثر توسعية إلى حد ما مما سيتيح في منشور. العينة أعلاه لا تعمل لأنها مفقودة validate(); وبعض المحتوى. أظن أن برنامج Java التعليمي لن يختفي في أي وقت قريب. أدناه هي نسخة معدلة

package test;

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

public class FullScreenFrame extends JFrame implements KeyListener {

    public FullScreenFrame () {
        addKeyListener(this);
        setUndecorated(true);
        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

    if (gd.isFullScreenSupported()) {
        try {
            this.getContentPane().addKeyListener(this);
            this.getContentPane().setLayout(new BorderLayout());
            this.getContentPane().add("Center", new JLabel("Full Screen, back to normal in 10 seconds"));
            gd.setFullScreenWindow(this);
            validate();
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } finally {
            gd.setFullScreenWindow(null);
        }
    } else {
        System.err.println("Full screen not supported");
    }

}

public void keyTyped(KeyEvent e) {
    System.out.println("keyTyped:" +  e.getKeyChar() + "source:"  + e.getSource() );
}
public void keyPressed(KeyEvent e) {
    System.out.println("keyPressed:" + e.getKeyChar() + "source:"  + e.getSource() );
}
public void keyReleased(KeyEvent e) {
    System.out.println("keyReleased:" + e.getKeyChar() + "source:"  + e.getSource() );
       setVisible(false);
        dispose();
    }

    public static void main (String [] args) {
        new FullScreenFrame();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top