Изменение графического контекста в Java - PullRequest
0 голосов
/ 09 ноября 2008

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

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

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

Спасибо

Влад

Ответы [ 3 ]

3 голосов
/ 09 ноября 2008

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

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

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

1 голос
/ 10 ноября 2008

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

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

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

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

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

0 голосов
/ 10 ноября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...