Threading с Swing - PullRequest
       22

Threading с Swing

0 голосов
/ 05 ноября 2011

В основном у меня есть программа, у которой есть класс для создания базового графического интерфейса пользователя, и другой класс, который расширяет Canvas. Этот класс Canvas добавляется в JPanel обычным способом myPanel.add(object). Теперь в этом классе я хочу иметь методы для перемещения объектов, таких как прямоугольники.

У меня такие вопросы; Есть ли способ по существу, чтобы этот JPanel или его добавленный объект (myCanvas) работал в отдельном потоке?

Также в следующем методе:

public void paint(Graphics g){
    g.setColor(Color.black);
    g.drawRect(0, 0, 50, 50);
}

Есть ли способ разделить эти операции на несколько методов? То есть несколько методов, которые рисуют на холсте?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 05 ноября 2011

Не используйте Canvas - приложение Swing.Используйте JPanel или JComponent и переопределите метод paintComponent ().Также не забывайте super.paintComponent (g) в начале метода.

См. Раздел в руководстве по Swing по Выполнение пользовательского рисования для получения дополнительной информации.

1 голос
/ 05 ноября 2011

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

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

...