Создать 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 показывает:
- Системные свойства (вы можете установить), которые используются для безголовых или нет.
- Настройка среды 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));
}