2016-12-21 3 views
-1

Я следую за видео этого парня: https://www.youtube.com/watch?v=1gir2R7G9ws. Кроме того, я использую Netbeans. Каждый раз, когда я запускаю его, например, когда я пытался использовать предпочтительный размер вместо заданного размера, он все равно выводит небольшое окно.Почему мой кадр устанавливается в небольшое окно каждый раз, когда я его запускаю?

public class APCSGame extends Canvas implements Runnable{ 

... 

public final int WINWIDTH=1000,WINHEIGHT=500, SCALE=1;; 
JFrame frame; 

private BufferedImage backgroundMenu=null; 

public APCSGame(){ 

    frame=new JFrame("Testing it out boiiiii"); 
    setSize(WINWIDTH*SCALE,WINHEIGHT*SCALE); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(null); 

    frame.add(this); 
    frame.pack(); 

    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 

... 

public static void main(String[] args) { 
    new APCSGame().start(); 

} 

} 
+0

Не помещайте темы, пожалуйста, упростите свой код в [mcve], то есть простую программу, в которую вы помещаете изображение внутри 'JFrame'. Не расширяйте 'Canvas', он принадлежит AWT, вместо этого используйте' JPanel'. Также см. [Следует ли избегать использования setPreferred/Maximum/MinimumSize?] (Http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi) (ДА). Вместо этого переопределите 'getPreferredSize' вашего холста (или' JPanel') – Frakcool

+0

Я говорю с вами. Разве вы не читали, что ['pack()'] (https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html#pack()) делает? Он уважает 'preferredSize' компонентов и изменяет размер вашего фрейма до минимального размера, где все компоненты имеют свой' preferredSize' уважаемый – Frakcool

+0

Uh ... Я просто прокомментировал вызов setLayout, и он работал нормально. –

ответ

2

Почему вы должны установить макет по Frame «s в null?

Пожалуйста, удалите или закомментируйте эту строку: frame.setLayout(null);

А затем он использует менеджер размещения по умолчанию FlowLayout. Или вы можете указать другой менеджер компоновки.

+0

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

+0

Мой ответ должен работать !!! Пусть ваш код будет точно таким, как вы опубликовали, а затем просто комментируйте 'frame.setLayout (null);'. –

+0

Думаю, я понимаю, что вы хотите, чтобы мой код делал, но он по-прежнему не увеличивает размер. Теперь я не могу даже масштабировать его, если я устанавливаюResizable в true ... –

-1

использовать этот код для установки размера

this.setSize(width,height); 

или

frame.setSize(width,height); 
+0

Ни одна из этих работ не работает. по какой-то причине frame.setSize не отобразил изображение на этот раз, но сам кадр по-прежнему незначительный. –

0

Если вы хотите создать контейнер без менеджера макетов, как вы это делаете в вашем примере;

frame.setLayout(null); 

Это означает, что дети-контейнеры будут иметь абсолютные позиции. Вам нужно сделать следующее:

  • Вызвать метод SetBounds Компоненты класса для каждого из детей контейнера
  • Вызова компонентного класса перекрашивать метод

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

Смежные вопросы