Вопрос

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

У меня есть следующий код, который я пытаюсь использовать:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
if(!gs.isFullScreenSupported()) {
    System.out.println("full-screen not supported");
}

Frame frame = new Frame(gs.getDefaultConfiguration());
Window win = new Window(frame);

try {
    // Enter full-screen mode
    gs.setFullScreenWindow(win);
    win.validate();
}

Проблема с этим в том, что я работаю в классе, который расширяет JPanel, и, хотя у меня есть переменная кадра типа, у меня нет окна типа в классе.

Мое понимание JPanel в том, что это своего рода окно, но я не могу передать это «в Gs.setfullScreenWindow (победа в окне) ... как мне это сделать?

Есть ли простой способ вызвать это или аналогичный метод, используя JPanel?

Есть ли способ получить что -нибудь из окна типа от моего JPanel?

-

Изменить: следующий метод меняет состояние jframe и называется каждые 10 мс:

public void paintScreen()
{
    Graphics g;
    try{
        g = this.getGraphics(); //get Panel's graphic context
        if(g == null)
        {
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setExtendedState(frame.getExtendedState()|JFrame.MAXIMIZED_BOTH);
            frame.add(this);
            frame.pack();
            frame.setResizable(false);
            frame.setTitle("Game Window");
            frame.setVisible(true);
        }
        if((g != null) && (dbImage != null))
        {
            g.drawImage(dbImage, 0, 0, null);
        }
        Toolkit.getDefaultToolkit().sync(); //sync the display on some systems
        g.dispose();
    }
    catch (Exception e)
    {
        if(blockError)
        {
            blockError = false;
        }
        else
        {
            System.out.println("Graphics context error: " + e);
        }
    }
}

Я ожидаю, что может быть несколько избыточных или ненужных вызовов после заявления IF (g == null) (все кадры.

Кроме того, ошибка блока - это то, что кажется. Я игнорирую ошибку. Ошибка возникает только один раз, и это работает нормально при настройке, чтобы игнорировать первый экземпляр ошибки ... Для всех, кто заинтересован, я могу опубликовать там дополнительную информацию, если кто -то хочет посмотреть, можно ли удалить этот блок, но я не обеспокоен ... Я мог бы посмотреть на это позже.

Это было полезно?

Решение

Вы добились успеха в этой проблеме? Это может быть полезно, если бы вы могли обновить свой вопрос своим ожидаемым поведением и что на самом деле делает код? Как уже отмечалось, JFrame - это подкласс окна, поэтому, если у вас есть JFrame, вам не нужно окно.

Для того, что это стоит, у меня есть приложение Java, которое работает в полноэкранном режиме. Хотя экран не перекрашивается так часто, как ваш, он регулярно перекрашивается. Я делаю следующее, чтобы ввести полноэкранное:

// pseudo-code; not compilable

JPanel container = new JPanel();
container.setOpaque( true ); // make sure the container will be visible

JFrame frame = new JFrame();
frame.getContentPane().add(container); // add the container to the frame
frame. ... //other initialization stuff, like default close operation, maximize, etc

if ( fullScreenModeIsSupported )
    frame.setUndecorated( true ); // remove window decorations from the frame
    gs.setFullScreenWindow( frame );
    frame.validate();

Затем, когда мне нужно обновить экран, я просто подключаю новую JPanel в container JPanel:

// pseudo-code; not compilable

container.removeAll(); // clean out the container
container.add( jPanelWithNewDisplay ); // add the new display components to the container
container.validate();  // update and redisplay
container.repaint();

Не могу утверждать, что это технически идеально, но это хорошо работает для меня. Если примеры псевдокода не сокращают его, я могу потратить некоторое время на составление компилябельного примера.

Другие советы

JPanel не подкласс Окно. Jframe является.

Итак, вы можете попробовать:

JFrame yourFrame = new JFrame();
yourFrame.add(yourPanel);

appyYourFullScreenCodeFor( yourFrame );

Это должно работать.

Я думаю, что получил то, что вам нужно.

  1. Установите рамку неоснованным, так что он поступает без какого -либо панели заголовка и прочего.

  2. Добавьте свою панель в кадр., Так что выглядит так, будто отображается только ваша панель.

  3. Максимизируйте свой кадр. Так что теперь должно выглядеть так, как будто ваша панель принимает полный экран без и оконных вещей.

    Frame.Setundecorated (True); Frame.add (панель); // теперь максимизируйте вашу кадр.

Примечание: Важно отметить, что нежественный API может быть вызван только тогда, когда ваш кадр не поддается игре, поэтому, если он уже покажет, то сначала вам нужно сделать SetVisible (false).

РЕДАКТИРОВАТЬ1: Если все, что вам нужно, это получить окно, содержащее вашу панель, то вы можете сделать это:

Window win = SwingUtilities.getAncestorOfClass(Window.class, myPanel);

Как только вы получите экземпляр окна, вы можете пройти его везде, где захотите.

Edit2: Так же Frame класс расширяется Window так что вы можете прямо сделать gs.setFullScreen(frame). Анкет Вам не нужно создавать новое окно для этого кадра.

Мое понимание JPanel в том, что это своего рода окно

Почему ты так думаешь? Вы читали API? JPanel простирается из окна?

Вы можете попробовать использовать класс SwingUtilities. У него есть метод, который возвращает окно для данного компонента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top