لماذا ويندوز XP التقليل من ضربتي كامل الشاشة نافذة في ثاني الشاشة ؟

StackOverflow https://stackoverflow.com/questions/53820

  •  09-06-2019
  •  | 
  •  

سؤال

في تطبيق أنا و (في جافا/البديل), يجب أن تظهر على كامل الشاشة نافذة على الثاني شاشة المستخدم.أنا فعلت هذا باستخدام تعليمة برمجية مشابهة لما واحد ستجد أدناه...يكون في أقرب وقت كما كنت فوق في نافذة فتح بواسطة مستكشف windows أو حالما افتح مستكشف ويندوز (أنا باستخدام نظام التشغيل windows XP), كامل الشاشة تم تصغير نافذة...

هل تعرف أي طريقة أو حل لإصلاح هذه المشكلة أم أن هناك شيء مهم لم أفهم مع كامل الشاشة ويندوز ؟

شكرا للمساعدة ،

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JWindow;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Window;

import javax.swing.JButton;
import javax.swing.JToggleButton;
import java.awt.Rectangle;
import java.awt.GridBagLayout;
import javax.swing.JLabel;

public class FullScreenTest {

    private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="94,35"
    private JPanel jContentPane = null;
    private JToggleButton jToggleButton = null;
    private JPanel jFSPanel = null;  //  @jve:decl-index=0:visual-constraint="392,37"
    private JLabel jLabel = null;
    private Window window;
    /**
     * This method initializes jFrame   
     *  
     * @return javax.swing.JFrame   
     */
    private JFrame getJFrame() {
        if (jFrame == null) {
            jFrame = new JFrame();
            jFrame.setSize(new Dimension(474, 105));
            jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jFrame.setContentPane(getJContentPane());
        }
        return jFrame;
    }

    /**
     * This method initializes jContentPane 
     *  
     * @return javax.swing.JPanel   
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getJToggleButton(), null);
        }
        return jContentPane;
    }

    /**
     * This method initializes jToggleButton    
     *  
     * @return javax.swing.JToggleButton    
     */
    private JToggleButton getJToggleButton() {
        if (jToggleButton == null) {
            jToggleButton = new JToggleButton();
            jToggleButton.setBounds(new Rectangle(50, 23, 360, 28));
            jToggleButton.setText("Show Full Screen Window on 2nd screen");
            jToggleButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    showFullScreenWindow(jToggleButton.isSelected());
                }
            });
        }
        return jToggleButton;
    }

    protected void showFullScreenWindow(boolean b) {
        if(window==null){
            window = initFullScreenWindow();
        }
        window.setVisible(b);

    }

    private Window initFullScreenWindow() {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gds = ge.getScreenDevices();
        GraphicsDevice gd = gds[1];
        JWindow window = new JWindow(gd.getDefaultConfiguration());
        window.setContentPane(getJFSPanel());
        gd.setFullScreenWindow(window);
        return window;
    }

    /**
     * This method initializes jFSPanel 
     *  
     * @return javax.swing.JPanel   
     */
    private JPanel getJFSPanel() {
        if (jFSPanel == null) {
            jLabel = new JLabel();
            jLabel.setBounds(new Rectangle(18, 19, 500, 66));
            jLabel.setText("Hello ! Now, juste open windows explorer and see what happens...");
            jFSPanel = new JPanel();
            jFSPanel.setLayout(null);
            jFSPanel.setSize(new Dimension(500, 107));
            jFSPanel.add(jLabel, null);
        }
        return jFSPanel;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        FullScreenTest me = new FullScreenTest();
        me.getJFrame().setVisible(true);

    }

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

المحلول

عادة عندما يكون هناك تطبيق في "ملء الشاشة" وضع سوف يستغرق على سطح المكتب بأكمله.المستخدم للوصول إلى نافذة أخرى سيكون لديهم alt-tab إلى ذلك.عند هذه النقطة ويندوز من شأنه التقليل من شاشة التطبيق الكامل حتى أن البعض طلب أن تأتي إلى الأمام.

هذا يبدو وكأنه قد يكون خطأ (غير موثق ميزة...) في نظام التشغيل windows.بل ربما ينبغي أن لا يكون ذلك على شاشة مزدوجة الإعداد.

خيار واحد لإصلاح هذا بدلا من إعداد أن يكون "ملء الشاشة" فقط جعل النافذة بنفس حجم الشاشة مع موقع (0,0).يمكنك الحصول على معلومات الشاشة من GraphicsConfigurations على GraphicsDevice.

نصائح أخرى

التعليمة البرمجية التالية يعمل (شكرا لك جون).مع كامل الشاشة الكبيرة "دائما في القمة" نافذة.ولكن ما زلت لا أعرف لماذا ويندوز سبب هذا stranged السلوك...

private Window initFullScreenWindow() {
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] gds = ge.getScreenDevices();
    GraphicsDevice gd = gds[1];
    JWindow window = new JWindow(gd.getDefaultConfiguration());
    window.setContentPane(getJFSPanel());
    window.setLocation(1280, 0);
    window.setSize(gd.getDisplayMode().getWidth(), gd.getDisplayMode().getHeight());
    window.setAlwaysOnTop(true);
    //gd.setFullScreenWindow(window);
    return window;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top