JFrame не может найти метод 'pack' - PullRequest
1 голос
/ 04 ноября 2011

Я беру начальный Java-класс, и для назначения требуется, чтобы я написал класс для представления JPanel с кнопками для увеличения и уменьшения значения и меткой для отображения значения. Затем я должен создать отдельный класс, который создает панель и добавляет ее к фрейму. Я пытаюсь изменить размер рамки, чтобы соответствовать размеру панели, запустив метод pack. Я пытаюсь вызвать метод упаковки кадра, используя:

SwingUtilities.getAncestorOfClass(JFrame.class, this).pack()

Я получаю сообщение об ошибке «Не удается найти символ - метод pack ()». GetAncestorOfClass определенно возвращает JFrame, и это правильный JFrame. Когда я запускаю метод pack из класса драйвера, где создается JFrame, проблем не возникает. Есть идеи, почему он не может найти метод упаковки? Это потому, что я пытаюсь запустить это из отдельного файла класса? Я также не могу получить доступ к некоторым другим методам JFrame, таким как getContentPane, но у меня есть возможность получить доступ к некоторым другим, таким как add. А?

Ответы [ 3 ]

5 голосов
/ 04 ноября 2011

Метод SwingUtilities.getAncestorOfClass возвращает Container. Теперь вы знаете, что Container действительно будет JFrame, но компилятор этого не делает. А Java - это статический язык, а не динамический, который будет просто пытаться вызывать метод независимо от того, объявит его класс или нет.

Поскольку Container не имеет метода pack, компилятор будет жаловаться. Вам нужно привести к JFrame, чтобы он заработал:

((JFrame)SwingUtilities.getAncestorOfClass(JFrame.class, this)).pack();

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

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

Вам нужно привести его к JFrame:

((JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, this)).pack();
1 голос
/ 04 ноября 2011

Метод SwingUtilities.getAncestorOfClass(Class, Component) возвращает компонент, а не JFrame.

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