私がC#でプログラミングしていたとき、私は非常に頻繁にイベントを利用していました。ここで、Javaで同様のことを実現したいと思います。私は両方の言語が異なっていることを知っています、そしてそのようなメカニズムを実装することにはいくつかの違いがあります。より良い画像を提供するために、用語の一部を混乱させる可能性があるため、取得したいものについて少し説明します。
MyClassには、 MyEventの起動を処理するコードと、特定の状況でそのイベントを起動するコードが含まれています。
MyEventArgsは、 MyClassからデータを転送し、イベントの起動とともに送信されるクラスであるため、MyEventを処理する関数には、 MyClassインスタンスの状態に関する追加情報があります。
また、メインメソッドにMyClassのインスタンスとMyEventを処理するコードを含むMyAppクラスがあり、MyClass内でイベントが発生すると、 MyEventをリッスンするコードで特定のアクションが実行されます。
それでも不明な場合は、ボタンクリックの背後にあるc#メカニズムとまったく同じです。ボタンの代わりにクラスがあり、マウスイベント引数の代わりにイベント引数があり、クリックの代わりに私が設計した動作があります。
私は自分の問題に対するいくつかの答えをグーグルで検索しようとしました、そして例えば私は次のようなサイトを見つけました:
http://javarevisited.blogspot.com/2011/12/observer-design-pattern-java-example.html http://www.javaworld.com/javaworld/javaqa/2002-03/01-qa-0315-happyevent .html
そして、私はちょうど迷子になり、悪い場所を探している/悪いキーワードを使用している、またはこれらの例から何も理解できない/必要な方法で機能するように変換できない可能性があります。
MyClass、 MyEvent、 MyEventArgs、名前、イベントを発生させるためにクラスで使用する必要のあるポインティングコード、およびクラスの使用例とイベントの処理を使用して、このようなメカニズムを処理するコードの例または少なくともドラフトを求めています。 Mainメソッドでは、この問題に頭を悩ませるのに役立ちます。
==========編集========
たぶん、Android開発者が利用できるようなものがいくつかありますか?私の目標は、Javaを削除した後、モバイルアプリの開発に取り掛かることです。
==========編集========
まだ興味のある人がいれば、ここにいくつかのサンプルコードがあります。これは私が言及した名前を使用せず、一般的に私が探しているものを示しています。
そして、正確な解決策はありません、多分誰かが私が探しているものに似た何かを提案するでしょうか?
frmTest.cs
namespace SampleApp
{
public partial class frmTest : Form
{
CountdownTimer ctmrTest;
public frmTest()
{
InitializeComponent();
ctmrTest = new CountdownTimer(100);
ctmrTest.CountdownTimerTick += new CountdownTimer.CountdownTimerTickEventHandler(ctmrTest_CountdownTimerTick);
}
void ctmrTest_CountdownTimerTick(object sender, CountdownTimerEventArgs ea)
{
lblTimer.Text = ea.timeString;
if (ea.countdownFinished) countdownEnd();
}
private void btnStart_Click(object sender, EventArgs e)
{
ctmrTest.Reset();
ctmrTest.Start();
}
void countdownEnd()
{
MessageBox.Show("Finish");
}
}
}
CountdownTimer.cs
namespace SampleApp
{
public class CountdownTimer
{
Timer tmrTicks = new Timer();
int secondsLeft = 0;
int numberOfSecondsToCountdown = 0;
public bool IsWorking
{
get { return tmrTicks.Enabled; }
}
public CountdownTimer(int seconds)
{
...
}
void tmrTicks_Tick(object sender, EventArgs e)
{
...
WhenCountdownTimerTick(new CountdownTimerEventArgs(secondsLeft, numberOfSecondsToCountdown, true));
}
public void Reset()
{
...
WhenCountdownTimerTick(new CountdownTimerEventArgs(secondsLeft, numberOfSecondsToCountdown, false));
}
public void Stop()
{
tmrTicks.Enabled = false;
}
public void Start()
{
,,,
}
public delegate void CountdownTimerTickEventHandler(object sender, CountdownTimerEventArgs ea);
public event CountdownTimerTickEventHandler CountdownTimerTick;
protected virtual void WhenCountdownTimerTick(CountdownTimerEventArgs ea)
{
if (CountdownTimerTick != null)
{
CountdownTimerTick(this, ea);
}
}
}
}
CountdownTimerEventArgs.cs
namespace SampleApp
{
public class CountdownTimerEventArgs : EventArgs
{
public string timeString = "";
public bool countdownFinished = false;
public CountdownTimerEventArgs(int secondsLeft, int SecondsToCountdown, bool isfinished)
{
countdownFinished = isfinished;
timeString = string.Format("{0:00}:{1:00}", secondsLeft / 60, secondsLeft % 60);
}
}
}