Изменение графического контекста в Java

У меня есть форма, которая пытается изменить графический контекст JComponent. Я использую, например,

((Graphics2D) target.getGraphics()).setStroke(new BasicStroke(5));

Теперь сразу после того, как я установил значение и закрыл форму, изменение не видно. Могу ли я изменять графический контекст JComponent? Как еще я мог бы изменить обводку, цвет и трансформации?

Спасибо,

Влад

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
747
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

У такого подхода есть несколько проблем. Во-первых, большинство компонентов сами устанавливают эти параметры, когда их просят перекрасить. Это означает, что ваше изменение будет потеряно каждый раз, когда компонент достигнет точки, в которой он действительно будет его использовать. Но на даже более фундаментальном уровне объекты Graphics2D не являются постоянными. Обычно они создаются каждый раз при перерисовке компонента, а это означает, что полученный вами объект Graphics2D не будет тем же, что компонент будет использовать при перерисовке.

Что вам нужно сделать, чтобы добиться этого, - это либо заново реализовать конкретный компонент, либо реализовать новый внешний вид, который повлияет на весь набор компонентов Swing. Взгляните на следующую ссылку для получения дополнительной информации об этом:

http://today.java.net/pub/a/today/2006/09/12/how-to-write-custom-look-and-feel.html

Некому ответить? Я дал некоторое время, чтобы посмотреть, есть ли перед собой какой-нибудь хороший ответ: я не специалист в этом вопросе ...

Во-первых, я не совсем понимаю ваш вопрос: вы меняете настройку, а затем закрываете форму?

В любом случае, я не слишком уверен, но где-то в процессе графический контекст может быть пересчитан или взят из значения по умолчанию. Возможно, если вы проделаете эту операцию в методе paint (), вы сможете получить какой-то результат, хотя я не уверен.

Для ряда изменений обычно используется декоратор. Я немного исследовал эту тему, отвечая на вопрос по SO: Как добавить разделитель к JComboBox в Java?. Мне пришлось нарисовать там свою границу (асимметричную), но часто вы просто берете существующую, так что это довольно просто.

Надеюсь, я предоставил некоторую информацию, если это не помогло, возможно, вам следует предоставить более подробную информацию о том, что вы хотите сделать (и, возможно, простую минимальную программу, иллюстрирующую вашу проблему).

Хорошо, я обошел проблему следующим образом: пользовательский компонент JComponent теперь содержит объект Stroke, который задается формой «Выбрать штрих», когда пользователь нажимает OK. Затем в методе рисования JComponent я устанавливаю обводку графического контекста, переданного в качестве параметра, для рисования к тому, что содержится в объекте.

Я экспериментировал и обнаружил, что по какой-то причине JComponent.getGraphics (). Set * не работает.

Другие вопросы по теме