2010-12-10 21 views
0

私はScalaを使ってMenuBarでVaadinウィンドウを作成しようとしています。 com.vaadin.ui.MenuBar.MenuItemのインポートが見つからないことを示すコンパイラエラーが表示されます。私は(6.4.8)Vaadinの図書館で見てきた、そしてそれはクラスがあることが表示されます。ここではなぜscalaはcom.vaadin.ui.MenuBar.MenuItemを認識しません

com/vaadin/ui/MenuBar$Command.class 
com/vaadin/ui/MenuBar$MenuItem.class 
com/vaadin/ui/MenuBar.class 

は、クラス構造であるメニューバーのソースから:

@SuppressWarnings("serial") 
@ClientWidget(value = VMenuBar.class, loadStyle = LoadStyle.LAZY) 
public class MenuBar extends AbstractComponent { 
    ... 
    public interface Command extends Serializable { ... } 
    public class MenuItem implements Serializable { ... } 

} 

デモの目的のために、ここではサンプルScalaのクラスです:

import com.vaadin.Application 
import com.vaadin.ui.Button 
import com.vaadin.ui.Window 
import com.vaadin.ui.MenuBar 
import com.vaadin.ui.MenuBar.Command 
import com.vaadin.ui.MenuBar.MenuItem 

class MyVaadinApplication extends Application 
{ 

    private var window : Window = null 

    override def init() = 
    { 
     window = new Window("My Scala Vaadin Application") 
     setMainWindow(window) 
     window.addComponent(new Button("Click Me")) 
    } 

} 

そして、ここで私はそれをコンパイルしようとすると、結果のエラーです:

/Users/jstanford/Development/NetBeansProjects/TraderDashboard/src/main/scala:-1: info: compiling 
Compiling 2 source files to /Users/jstanford/Development/NetBeansProjects/TraderDashboard/target/classes at 1291973683915 
[ERROR]MyVaadinApplication.scala:7: error: MenuItem is not a member of com.vaadin.ui.MenuBar 
import com.vaadin.ui.MenuBar.MenuItem 
    ^

誰でも問題を見つけることができますか?

おかげで、 ジョン

答えて

4

インナークラスは通常どおりインポートできません。これはJavaに適しています。 Button#ClickEventタイプのようにタイプ投影を指定するだけです:

import com.vaadin._ 
import ui._ 
import Button._ 

class MyScalaVaadinApplication extends Application { 
    val window = new Window("My Vaadin Application") 

    def init { 
    window.addComponent(new Button("Click Me", new ClickListener { 
     def buttonClick(clickEvent: Button#ClickEvent): Unit = window.showNotification("Just a message") 
    })) 

    setMainWindow(window) 
    } 
} 
+0

ありがとうございました。私はそれが何か単純だと思った... – jxstanford

1

何が起こっているかを示す非常に簡単な例。

ジャワ:

package a; 
public class Outer { public class Inner {} } 

スカラ:MenuBar.MenuItem等、インナー、非静的内部クラスであり、そのようなのような1つのインスタンスに関連付けられていることを

import a.Outer 
import a.Outer.Inner // causes *Inner is not a member of a.Outer* 

お知らせ外側です。私達はちょうどimport a.Outer.Innerどのようにコンパイラがのどのインスタンスがインナーが所属することになっているために知っているだろうことができれば

import a.Outer 
import a.Outer.Inner 

object dummy { 
    val o = new Outer 
    val o2 = new Outer 
    import o.Inner 
    val i = new Inner 
    val i2 = new o2.Inner 
} 

:しかし、Scalaは、私たちがのインスタンスを使用してインナーインポートすることができますか?

問題が解決されました。

関連する問題