Создание полноэкранной панели Java

Как бы вы сделали JComponent (панель, фрейм, окно и т. д.) полноэкранным, чтобы он также перекрывал все на экране, включая панель запуска Windows?

Я не хочу менять разрешение или что-то еще с графическим устройством, таким как битовая глубина и т. Д., Я просто хочу перекрыть все остальное.


person clamp    schedule 27.02.2010    source источник
comment
Что не так с ответами, данными до сих пор?   -  person Thomas    schedule 20.03.2010
comment
Да, серьезно. Дай Адамски - лучшего ответа не получишь.   -  person Benjamin Cox    schedule 23.03.2010
comment
Я имею в виду, что пока вы не дадите понять, что вам не нравится в текущих ответах, никто не сможет (или не захочет) придумать что-то еще.   -  person Thomas    schedule 23.03.2010


Ответы (5)


Вы можете попробовать некоторые из кодов на этой странице, позволяющих контейнеру заполнить экран (поэтому это не решение для отдельного компонента, а для набора компонентов внутри контейнера, такого как JFrame)

public class MainWindow extends JFrame
{
  public MainWindow()
  {
    super("Fullscreen");
    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(l);
      }
    });
  }
  ...
}
person VonC    schedule 17.03.2010
comment
Не могли бы вы объяснить, почему это работает. В частности, часть исполняемого файла, например строки, следующие за l.x -= p.x;. Это работает, но я также хочу полностью понять это. - person Connorelsea; 23.02.2015
comment
@Connorelsea Возможно, было бы проще задать это в отдельном вопросе: через 5 с лишним лет и не помнить всех деталей. - person VonC; 23.02.2015

Ознакомьтесь с этим руководством, описывающим API полноэкранного режима Java. .

Пример кода (взято из туториала). Обратите внимание, что код работает с Window, поэтому вам нужно будет встроить JPanel с Window (например, JFrame), чтобы сделать это.

GraphicsDevice myDevice;
Window myWindow;

try {
    myDevice.setFullScreenWindow(myWindow);
    ...
} finally {
    myDevice.setFullScreenWindow(null);
}
person Adamski    schedule 27.02.2010

Вам необходимо использовать следующий API: http://java.sun.com/docs/books/tutorial/extra/fullscreen/index.html

Перейти в полноэкранный режим не так просто, как создать большую панель, вам нужно изучить базовую графику ОС. Но ваш код JPanel должен нормально переводиться.

person Sandro    schedule 27.02.2010

Мне нужно было много искать, чтобы сделать то же самое. Вот полностью рабочая версия с пошаговыми инструкциями, чтобы я мог найти ее позже и использовать.

Шаг 1: создайте файл с именем fullscreen.java

Шаг 2: скопируйте этот код и вставьте как есть:

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

public class fullscreen extends Window 
{
  private Button button;

  public fullscreen() 
  {
    super(new Frame());
    button = new Button("Close");
    button.addActionListener(new ActionListener() 
    {
      public void actionPerformed(ActionEvent e) 
      {
        System.exit(0);
      }
    });

    setLayout(new FlowLayout());
    add(button);

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    setBounds(0,0,screenSize.width, screenSize.height);
  }

  public static void main(String[] args) 
  {
    // This will take over your whole screen tested and works in my:
    // Fedora 12/13/14
    // CentOS 5.0
    // if this works for you, in other platforms, please leave a comments which OS it worked.
    // happy coding!
    new fullscreen().setVisible(true);
  }

}

Шаг 3: скомпилируйте код и запустите

Сделанный.

person Community    schedule 22.04.2011

На вашем месте я бы попытался сделать так, чтобы Java не рисовала границу Jframe, а заставляла его занимать весь экран.

import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;

import javax.swing.JFrame;


public class FenNoBorder extends JFrame {

    public FenNoBorder () {
        setUndecorated(true);
        setVisible(true);
        GraphicsEnvironment graphicsEnvironment=GraphicsEnvironment.getLocalGraphicsEnvironment();
        Rectangle maximumWindowBounds=graphicsEnvironment.getMaximumWindowBounds();
        setBounds(maximumWindowBounds);
    }
}
person user3426905    schedule 16.03.2014