У меня есть форма, которая пытается изменить графический контекст JComponent. Я использую, например,
((Graphics2D) target.getGraphics()).setStroke(new BasicStroke(5));
Теперь сразу после того, как я установил значение и закрыл форму, изменение не видно. Могу ли я изменять графический контекст JComponent? Как еще я мог бы изменить обводку, цвет и трансформации?
Спасибо,
Влад




У такого подхода есть несколько проблем. Во-первых, большинство компонентов сами устанавливают эти параметры, когда их просят перекрасить. Это означает, что ваше изменение будет потеряно каждый раз, когда компонент достигнет точки, в которой он действительно будет его использовать. Но на даже более фундаментальном уровне объекты 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 * не работает.