2009-07-16 13 views
8

previous questionに応じて、Swingで特定の効果を達成する方法について、JDesktopPaneとJInternalFrameに指示しました。残念ながら、scala.swingはどちらのクラスのラッパーも持っていないようですので、拡張していきます。scala.swingを拡張するにはどうすればよいですか?

をscala.swingと一緒に使用するのに最低限必要なラッパーを作成するために知っておくべきことと、それらのほとんどを行うための追加手順は何ですか?

編集:

誰かによって示唆されるように、私は私が達成しようとする効果を説明しましょう。私のプログラムは(個人的な)宝くじのベットをコントロールします。だから、私はいくつかの異なるチケットを持っています。それぞれのチケットは、さまざまな賭けと、さまざまな妥当性を持つことができます。

アイデアはこれらのチケットを別々の「スペース」に表示し、JInternalFramesは私が望むだけのようだし、新しいチケットを作成してファイルからロードし、ファイルに保存し、一般的にチェックするまたはそれぞれの情報を編集することができます。

それ以外にも、抽選結果を表示するスペースが必要であり、どれだけ貢献したのか、またどのように勝敗を分けるべきなのかを決定するプログラムを進化させるつもりです。私はまだそれのためのインターフェイスを考慮していない。

ことに注意してください。

  • 私はJavaクラスを「単なる使用」、およびまだScalaのスイング機能を十分に活用することはできません。以前の質問の答えは、すでにJavaクラスで何をしたいのかを教えてくれました。これは私がここで求めていることではありません。

  • これを行う方法については、既存のscala.swingクラスのソースコードを読んで、私がこの質問で回避しようとしている作業です。

答えて

0

すべてのJavaライブラリを直接スカラーコードにインポートできます。

スケーラチュートリアルのセクション「Javaとの対話」をお試しください。

Java in scala

0

どのような種類のスカラー機能を使用しようとしていますか?それは答えを思い付くのに役立ちます。私。 - あなたはJavaで潜在的に何をしようとしていますか?それから、Scalaでそれを行うより良い方法を考え出したり、もっと簡単にしようとしているクラスのラッパーを作成したりすることができます。

+0

十分に適切です。私は私の質問をするつもりです。 –

+0

余分な情報をお寄せいただきありがとうございますが、私はより技術的なレベル、つまりプログラム的に、Swingクラスで何をしたいのですか? –

3

Scalaの「暗黙の変換」メカニズムが考えられます。

implicit def enrichJInternalFrame(ji : JInternalFrame) = 
       new RichJInternalFrame(ji) 

あなたは今(クラスRichJInternalFrameを定義)JInternalFrameのを取り、持っているあなたとのJInternalFrameを拡張したいのですがどのような方法で、例えば:

class RichJInternalFrame(wrapped : JInternalFrame) { 
    def showThis = { 
    wrapped.show() 
    } 
} 

これあなたは、このような何かを行うことができますJInternalFrameで単にshowを呼び出す新しいメソッドshowThisを作成します。

val jif = new JInternalFrame() 
println(jif.showThis); 

Scalaは自動的RichJInternalFrameにJIFを変換し、あなたがそれで、このメソッドを呼び出してみましょう:あなたは今のJInternalFrameにこのメソッドを呼び出すことができます。

+1

おそらく、私の質問の記述にもっと明白になっていたはずです。質問自体が言うように、私はscala.swingを拡張したいと思います。 * scala.swing *を拡張するには?ただ一つの特質、クラス、またはscala.swingの方法について言及していない答えは、質問に答えることはできません! –

0

JRubyでは、拡張する代わりにJDesktopPaneまたはJInternalFrameに1つ(またはそれ以上)の特性を混在させることができます。この方法では、クラスをラップする必要はなく、既存のオブジェクトを使用するだけです。私が知る限り、これはScalaの特性では不可能です。

幸運にも、Rubyのような柔軟性のあるソリューションがあります:lexically open classes。このブログ記事は素晴らしい紹介、IMHOを提供します。

関連する問題