Рисование на Яве без JPanel - PullRequest
4 голосов
/ 02 июля 2010

Я пишу графический интерфейс пользователя для отображения данных на оси xy.Он написан на Java Swing, поэтому у меня есть JFrame, который содержит весь графический интерфейс.Одним из компонентов графического интерфейса пользователя является JPanel, который образует область, на которой отображаются данные.Я использую Graphics2D для рисования.

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

Проблема возникает, когда я пытаюсь получить объект Graphics для рисования.Я создаю JPanel, который выполняет рисование, но объект Graphics становится нулевым, когда я вызываю paintComponent().

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

Спасибо за предоставленную помощь!

PS Когда я говорю, что запускаю программу из командной строки, я хочу сказать,что вы не используете графический интерфейс.Все зарисовки и т. Д. Выполняются без интерфейса.Кроме того, я знаю, что вы не можете создать экземпляр объекта Graphics.

Ответы [ 2 ]

5 голосов
/ 02 июля 2010

Использовать java.awt.image.BufferedImage

BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();

//.. draw stuff ..

ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("myimage.png"));
writer.write(image);
3 голосов
/ 02 июля 2010

Если вы не используете GUI, вам нужно использовать режим без головы Это обеспечит вам правильную графическую среду. Вам придется либо выполнить с параметром, таким как

java -Djava.awt.headless=true 

или Установите свойство в вашем основном классе, например:

System.setProperty ( "java.awt.headless", "Истинный");

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

...