Создать GraphicsDevice для пользовательского драйвера

Я работаю над проектом с использованием Java во встроенной системе. У меня есть драйверы для экрана и сенсорного ввода, а также виртуальная клавиатура для ввода текста. Мой экранный драйвер имеет Graphics2D объект, который вы можете нарисовать и repaint(Rectangle) метод обновления. Аналогично, сенсорный драйвер способен генерировать MouseEvents для слушателей.

Прямо сейчас я работаю с рисованием прямо на экран. Это нормально, но я действительно хочу позволить пользователю моей библиотеки создавать JFrame и использовать обычные элементы Swing. Тем не менее, по умолчанию GraphicsEnvironment без головы, так как Java не видит мой EInkDriver класс или мой TouchDriver учебный класс.

Я знаю, что есть способы вызвать компонент paint метод получения изображения; Однако это имеет проблемы, когда вы рисуете Containerи я также хотел бы представить пользователю GraphicsConfiguration чтобы они могли написать что-то вроде JFrame frame = new JFrame(getEInkGraphicsConfiguration()); и продолжать, как будто они пишут настольное приложение Swing.

Учитывая эти возможности, которые у меня уже есть, как бы я создать GraphicsDevice или же GraphicsEnvironment что позволило бы мне использовать Swing в моем проекте?

1 ответ

Я очень кратко взглянул на абстрактный класс GraphicsEnvironment и предположил, что можно получить собственный класс и использовать ключ "java.awt.graphicsenv" строки 64 для его регистрации.

К счастью, есть абстрактный класс, а кода мало.


после этого

Следующий код из GraphicsEnvironment показывает:

  1. Системные свойства (вы можете установить), которые используются для безголовых или нет.
  2. Настройка среды DISPLAY.

Может быть, вы можете использовать эту информацию.

                        String osName = System.getProperty("os.name");
                        if (osName.contains("OS X") && "sun.awt.HToolkit".equals(
                                System.getProperty("awt.toolkit")))
                        {
                            headless = defaultHeadless = Boolean.TRUE;
                        } else {
                            headless = defaultHeadless =
                                Boolean.valueOf(("Linux".equals(osName) ||
                                                 "SunOS".equals(osName) ||
                                                 "FreeBSD".equals(osName) ||
                                                 "NetBSD".equals(osName) ||
                                                 "OpenBSD".equals(osName)) &&
                                                 (System.getenv("DISPLAY") == null));
                        }
Другие вопросы по тегам