Как использовать scala.swing.Applet в приложении Scala Swing? - PullRequest
4 голосов
/ 11 октября 2011

Я пытаюсь портировать Java-код на Scala.

Я хочу отобразить scala.swing.Applet в приложении с графическим интерфейсом.

С Java Swing я бы сделал

val jframe = new JFrame()
jframe.add(APPLET)

jframe.setVisible(true)
APPLET.setFocusCycleRoot(true)

APPLET.init()
APPLET.start()

Но код с использованием Scala Swing

def top = new MainFrame {
  contents = APPLET
}

не нравится тип:

error: type mismatch;
found   : scala.swing.Applet
required: scala.swing.Component
contents = APPLET

Когда я пытаюсь добавить апплет через одноранговые узлы Java, происходит сбой следующим образом:

def top = new MainFrame {
  contents = new Panel() {
    peer.add(new SinglePlayerGame)
  }
}

Я получаю это сообщение об ошибке:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: scala.swing.Applet cannot be cast to javax.swing.JComponent
    at scala.swing.Container$Wrapper$$anon$1.componentAdded(Container.scala:43)
    at java.awt.Container.processContainerEvent(Container.java:2071)
    at java.awt.Container.processEvent(Container.java:2042)
    at java.awt.Component.dispatchEventImpl(Component.java:4629)
    at java.awt.Container.dispatchEventImpl(Container.java:2103)
    at java.awt.Component.dispatchEvent(Component.java:4455)
    at java.awt.Container.addImpl(Container.java:1081)
    at java.awt.Container.add(Container.java:373)

Как мне решить эту проблему?

1 Ответ

3 голосов
/ 11 октября 2011

Это не написано в Scala, но Subway - простой пример гибридного апплета и приложения. И JApplet, и JFrame являются контейнерами верхнего уровня , а initContainer() выполняет общую инициализацию.

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

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