2012-01-31 5 views
2

私は、Spring、HibernateなどのJ2EEフレームワークでまともな知識を持ち、懸念の分離に触発されました。私はJavaのデスクトップ開発のスターターです。スイングではやや不明な点があります。 VBでは、フォームデザインは別のものとして保持され、フォームにはイベントリスナーのみが含まれます。しかし、私がスイングを始めたとき、多くのものが単一のクラスにロードされているため、作業が難しくなっています。私はどこが間違っているのか分かりません。同様のことは、私がSWTのような選択肢を始めたときも続きます。私は、インターネットからスイングとswtでプログラムロジックフォームデザインを分離する方法

import java.awt.Color; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import edu.umd.cs.piccolox.swt.PSWTCanvas; 
import edu.umd.cs.piccolox.swt.PSWTPath; 
import edu.umd.cs.piccolox.swt.PSWTText; 
public final class SWTBasicExample { 

/** 
* Create and open a new shell on the specified display. 
* 
* @param display display 
* @return a new shell on the specified display 
*/ 
public static Shell open(final Display display) { 
    final Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 

    // create a new SWT canvas 
    final PSWTCanvas canvas = new PSWTCanvas(shell, 0); 

    // create some SWT nodes 
    // and add them as child nodes to the canvas' camera's first layer 
    PSWTPath rect = PSWTPath.createRectangle(25, 25, 50, 50); 
    rect.setPaint(Color.RED); 
    canvas.getLayer().addChild(rect); 

    rect = PSWTPath.createRectangle(300, 25, 100, 50); 
    rect.setPaint(Color.BLUE); 
    canvas.getLayer().addChild(rect); 

    PSWTPath circle = PSWTPath.createEllipse(100, 200, 50, 50); 
    circle.setPaint(Color.GREEN); 
    canvas.getLayer().addChild(circle); 

    circle = PSWTPath.createEllipse(400, 400, 75, 150); 
    circle.setPaint(Color.YELLOW); 
    canvas.getLayer().addChild(circle); 

    PSWTText text = new PSWTText("Hello World\nMultiline");   
    text.translate(350, 150); 
    text.setPenColor(Color.GRAY); 
    text.setBackgroundColor(Color.BLACK); 
    canvas.getLayer().addChild(text); 

    text = new PSWTText("Goodbye World"); 
    text.translate(50, 400); 
    text.setPenColor(Color.MAGENTA); 
    canvas.getLayer().addChild(text); 

    shell.open(); 
    return shell; 
} 

public static void main(final String[] args) { 
    final Display display = new Display(); 
    final Shell shell = open(display); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
} 
} 

を得た

サンプルSWTコードはここですべてがとても私たちのビジネス・ロジックをめちゃくちゃにされており、デザインは単一のクラスです。私は、メソッドがそれほど複雑で再利用できないようにするために、最大10行を持つことができるということを研究しました。それは、デスクトップ開発ではなくロジックにのみ適用可能ですか?

一方、私はSwingがMVCフレームワークであると聞きました。だから、私は論理、デザイン、コントロールの分離が必要です。スイングとスウォッチでは、Javaのデスクトップ開発を容易にするための優れたエンジニアリングプラクティスが必要です。私は日食SWTを使用しているので、私のために好ましいでしょう。

おかげで、

+0

あなたはまともな知識を持っているJ2EEフレームワークでどのくらい作業していますか? (犯罪はなく、ただ質問する) – Sorceror

答えて

1

春(および他の上記の技術/フレームワーク)は、GUIフレームワークよりも絶対に別の目的を持っています。 2つの異なる技術から同じものを要求する必要はないかもしれません。デスクトップはウェブではなく、私たちが話すのと同じルールはありません。

SWTでMVCのようなパターン(特にデータバインディング)を使用する場合は、JFaceを参照してください。

+0

はい、私はあなたの意見を受け入れます。 Apache Foundation、SpringSource組織、Jbossコミュニティを追加することで、Java開発者はWeb開発のためのフレームワークを提供することができました。しかし、Javaのデスクトップ開発ではそうではありません。しかし、私はその背後にある理由を知らない。ありがとう、あなたの貴重な時間を費やして:D – MinusInfinity

+0

私はWebがデスクトップとはまったく異なる土台で作られていることを意味しました。クライアントサーバーパターンは、デスクトップ開発では一般的ではありません。そういうわけで、ほとんどのフレームワークは、同様のアプローチを使用していません。 GUIのようなものを使用しようとするときは、大量の定型コードを書く必要があります。 – Sorceror

1

Swing vs. SWTについては、両方を使用していますが(主にSwing)。少なくとも私がSWT(〜5年前)を調べていたとき、SWTのドキュメントはSwingに比べて非常に貧弱でした。私はSWTの多くのデザイン面が好きであっても、Swing、IMOよりも簡単ですが、IMOは、はるかに優れたドキュメントやサンプルなどを持っているため、学ぶべきものです。

主要なJPanel(またはComponentが何であるか)がの場合、という1つの手法は、各JPanelに関連付けられたモデル/データオブジェクト/ビジネスオブジェクトを持つことです。 JPanelには、panelToModel()やmodelToPanel()などの名前のメソッドがあります。前者は、ユーザが変更したものに対応するモデルを作成(または更新)し、後者はモデルを取り、適合させるためにGUIを更新する。さて、個人的に、私は何かを嫌いですが、これはかなり簡単な方法です。

+0

5年は長い道のりです;] .. SWTのドキュメントはそれほど良いものではなかった今のところ私は[SWT snippets](http://www.eclipse.org/swt/snippets/)のようなものがないとコードを書くことは間違いありません。私はこのタイプのスイングに関するドキュメントをそんなに逃しません! – Sorceror

+0

それは私を助けてくれました。誰でもタイムマシンを持っていますか? :-) – user949300

1

スイングでは、コンポーネント自体がMVCパターンに従います。彼らはモデルに基づいており、視覚的表現は簡単に置き換えることができます。より広い範囲では、これを自分で実装する必要があります。懸念の分離には、Actionのようないくつかのアプローチがあります。しかし、それは決してアプリケーションプラットフォームを使用する準備ができていない、それはGUIツールキットです。 JSR 296 - "Swing Application Framework"のようなアプリケーションフレームワークのプロジェクトが存在します。しかし、これは何年も確定していません。 Swingに基づいたもう1つの注目すべきプラットフォームはNetbeans platformですが、これはさらに高いレベルです。

SWTコンポーネントは、MVCの概念で設計されていません。 JFaceは、この概念をSWTにもたらします。これのOntopでは、Netbeansプラットフォームに似たアプリケーションフレームワークであるEclipse RCPを機能として利用することができます。

"raw" Swingをプログラミングしている場合は、いくらかサポートがありますが、まだ自分で多くの作業を行う必要があります。 SWTはあなたの側からより基本的な努力(そして規律)を求めます。しかし、両方のMVCのアイデアを実装しているプラ​​ットフォームのために。

+0

私は心配することなくソフトウェアがどのように構築されているのだろうかと思います。適切な分離をせずにソフトウェアを維持することはできますか?業界標準となるものを知りたいと熱望しています:) – MinusInfinity

関連する問題