Проблема JFrame: синтаксическая ошибка на токене "setDefaultCloseOperation" - PullRequest
1 голос
/ 09 ноября 2011

Ошибка: Синтаксическая ошибка на токене "setDefaultCloseOperation", Идентификатор ожидается после этого токена

Текущий код:

package me.geekplaya.Launcher;

import javax.swing.*;

public class Launcher {

//Create and setup the window.
JFrame frame = new JFrame("Simple GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JLabel textLabel = new JLabel("I'm a label in the window", SwingConstants.CENTER);
textLabel.setPrefferedSize(new Dimension(300, 100));
frame.getContentPane().add(textLabel, BorderLayout.CENTER);

//Display the window.
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}

1 Ответ

3 голосов
/ 09 ноября 2011

Тело класса может содержать только: определения переменных, определения методов или определения внутреннего класса.Тело метода содержит ноль или более операторов.Ваши утверждения должны быть помещены в тело метода.Вы определили их в теле класса.Например:

public class Launcher {

    public void method1() {
       // this is an instance method you can put code here too.
       // Only instances of the class Launcher can call this method.
    }

    public static void main( String[] args ) {
        // this is a class method (i.e. static) it belongs to the class Launcher
        // your code must go in here.
    }
}

Компилятор пытается сообщить вам, что он не распознает эти операторы как один из возможных вариантов (переменная def, метод def или внутренний класс def).Причина в том, что она находится на 2-й строке, а не на первой, в том, что первая строка может определять переменную экземпляра.Локальные переменные и переменные экземпляра могут иметь одинаковый синтаксис.Переменные, определенные в теле класса, являются переменными экземпляра (если не помечены как статические), а переменные, определенные в теле метода, являются локальными переменными для этого метода.

Так же, как и в стороне, вам не нужно устанавливать предпочтительную ширинуJLabel.JLabel изменит свой размер, чтобы исправить текст, который он дал.Обычно лучше, чтобы JLabel выбирал его размер в зависимости от содержимого, потому что это содержимое может измениться, и если вы жестко закодировали 300 пикселей в ширину и 100 пикселей в высоту, этого может быть недостаточно в зависимости от содержимого метки:

textLabel.setPrefferedSize(new Dimension(300, 100)); // this can be removed

Если вы хотите, чтобы окно было больше, установите предпочтительный размер JFrame и удалите вызов pack ().JFrame.pack () говорит JFrame установить его размер в зависимости от размера содержимого в JFrame.Если вы хотите, чтобы JFrame управлял своими размерами, просто установите их напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...