ユーザー インターフェイスの開発 (C# と Java の比較)
更新 : 2007 年 11 月
C# では、.NET Framework の豊富な Windows フォーム コンポーネント セットを使用して、クライアント側のフォーム アプリケーションをプログラミングできます。
Java
ほとんどの Java アプリケーションでは、AWT (Abstract Windowing ToolKit) または Swing を使用します。これらは AWT イベント モデルなど、AWT インフラストラクチャを使用してフォーム プログラミングを行います。AWT は、すべての基本的な GUI 機能とクラスを提供します。
Java の例
コンポーネントを追加する際は、通常、フレーム (タイトルと輪郭を持つウィンドウ) を使用します。
JFrame aframe = new JFrame();
通常、Component クラス (グラフィカル表示を持つオブジェクト) は拡張され、次のコードに示す Shape コンポーネントの paint メソッドのように継承されたメソッドが使用されるか、またはオーバーライドされるのが普通です。
import java.awt.*;
import javax.swing.*;
class aShape extends JComponent {
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
// Draw the shape.
}
public static void main(String[] args) {
JFrame aframe = new JFrame();
frame.getContentPane().add(new aShape ());
int frameWidth = 300;
int frameHeight = 300;
frame.setSize(frameWidth, frameHeight);
frame.setVisible(true);
}
}
イベントを処理するコンポーネントのために、アクション イベントを待機するように登録できます。たとえば、ボタンを押してから離すと、AWT は、そのボタンで processEvent を呼び出して、ActionEvent のインスタンスをボタンに送ります。ボタンの processEvent メソッドは、ボタンのすべてのイベントを受け取り、固有の processActionEvent メソッドを呼び出して、アクション イベントを渡します。後者のメソッドは、このボタンによって生成されたアクション イベントへの関与を登録しているすべてのアクション リスナにアクション イベントを渡します。
C#
C# では、.NET Framework の System.Windows.Forms 名前空間およびクラスが、Windows フォームの開発に必要なコンポーネントの包括的なセットを提供します。たとえば、次のコードでは、Label、Button、および MenuStrip を使用しています。
C# の例
単純に Form クラスから次のように派生させます。
public partial class Form1 : System.Windows.Forms.Form
次に、コンポーネントを追加します。
this.button1 = new System.Windows.Forms.Button();
this.Controls.Add(this.button1);
ラベル、ボタン、およびメニューをフォームに追加する方法を次のコードに示します。
namespace WindowsFormApp
{
public partial class Form1 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components = null;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.MenuStrip menu1;
public Form1()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.label1 = new System.Windows.Forms.Label();
this.Controls.Add(this.label1);
this.button1 = new System.Windows.Forms.Button();
this.Controls.Add(this.button1);
this.menu1 = new System.Windows.Forms.MenuStrip();
this.Controls.Add(this.menu1);
}
static void Main()
{
System.Windows.Forms.Application.Run(new Form1());
}
}
}
Java と同様に、C# でもコンポーネントのために、イベントを待機するように登録できます。たとえば、ボタンを押してから離すと、ランタイムにより、このボタンの Click イベントに対する関与を登録しているすべてのリスナに Click イベントが送られます。
private void button1_Click(object sender, System.EventArgs e)
{
}
次のコードを使用すると、button1 という名前の Button のインスタンスの Click イベントを処理するように button1_Click を登録できます。
// this code can go in InitializeComponent()
button1.Click += button1_Click;
詳細については、「ASP.NET Web アプリケーションの作成 (Visual C#)」を参照してください。
Forms クラスの詳細については、「Windows フォーム コントロールの機能別一覧」および System.Windows.Forms のトピックを参照してください。
参照
概念
ユーザー インターフェイスのデザイン (Visual C#)