Java-связь между классами и JFrame JDialog - PullRequest
0 голосов
/ 23 апреля 2010

Я написал отдельную игру «Подключи 4».

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

подключить 4 удержания GUI (JFrame) -> подключить 4 игровую модель

Я хотел бы реализовать Connect 4 сетевой графический интерфейс (JDialog) (здесь пользователь может действовать как сервер или клиент), который содержит сетевой API.(сервер обслуживает только одно соединение)

и, наконец, графический интерфейс чата (JDialog) для обмена сообщениями.

Мой вопрос: как мне реализовать межклассовую / графическую связь?когда получено сетевое сообщение, оно должно быть доставлено нужному получателю (игра / чат), а также сообщения, отправленные из чата / игры, переданные на удаленный компьютер.

Я просмотрел внутренние классы, но мне сказали, что этоплохая идея реализовать так много в одном классе, и мне эта идея тоже не очень понравилась.

Я написал еще один игровой линейный корабль на C #, и он использует делегатов для выполнения этой задачи, но, к сожалению, я проинформирован, что делегатынедоступно в Java.

Я новичок и в настоящее время изучаю варианты, поэтому я открыт для ваших указаний.

спасибо.

1 Ответ

1 голос
/ 23 апреля 2010

Здесь есть две проблемы.

Во-первых, вы должны помнить, что все операции с графическим интерфейсом должны выполняться из потока диспетчеризации событий Swing (EDT).Таким образом, если другой поток (например, поток, прослушивающий сетевые сообщения) хочет обновить графический интерфейс, он должен использовать SwingUtilities.invokeLater следующим образом:

 // Network thread
 final Message msg = getMessage();
 SwingUtilities.invokeLater(new Runnable() {
   public void run() {
      // This code will be executed on the EDT
      // it can access the msg variable because it is final
   }
 });

Второй момент - это координация объектов графического интерфейса и сетейобъекты.Я думаю, что лучший подход - создать два Mediator класса, которые будут получать уведомления от сетевого объекта и «переводить» их в соответствующие действия над объектом GUI (и наоборот).Эти посредники также будут следить за тем, чтобы события GUI отправлялись в EDT, как описано выше.

...