2016-05-22 5 views
1

私が取り組んでいるプロジェクトで機能を実装しようとしていますが、これはうまくいきません。このプロジェクトでは、すべて同じスーパークラスを共有する3つのオブジェクトを作成することができます。各オブジェクトはarrayListの一部であり、JLabel内部のImageIconで表されます。特定のJLabelをクリックし、対応するオブジェクトに関する情報を返すtoString()メソッドを使用してメッセージダイアログを開くことができます。特定のラベルをクリックしてarrayList内のオブジェクトに関連するメソッドを呼び出す

これまでのところ、ユーザーはImageIconをクリックすることができますが、最近作成されたオブジェクトに関する情報しか表示されない(実装されていない)システムがあります。私はこのコードがなぜ情報を表示するのか知っていますが、必要なコードをどのように作成するのか分かりません。

誰かが助けてくれれば非常に感謝しています。何か説明が不十分であるか、精緻化が必要な場合は、お尋ねください。私は現在のコードを以下に添付しました。ありがとうございます。

コードの説明: 'count'変数は、作成されたオブジェクトの数をカウントするために使用されます(これ以上の数はありません)。現在のコードでは、作成された 'count-1'オブジェクト(最新のもの)が表示されます。私はクリックされたlableに関連する特定のオブジェクトを見つけるために何をする必要があるのか​​分かりません。

label[count].addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) 
      { 
       JOptionPane.showMessageDialog(null, myAppliances.get(count-1).toString()); 
      }}); 

答えて

0

各オブジェクトは、ArrayListの一部であり、JLabelの内部イメージアイコンによって表されます。

これは良いヒントです。どのように

クラスMyObjectLabelは、以下のようにJLabelの何か拡張し、次のことについて:

public MyObjectLabel extends JLabel 
{ 
    private YourObjectThatisInList localCopyOfObject; 
    public MyObjectLabel (YourObjectThatisInList object) 
    { 
    super(createIconForTheObject(object)); 
    this.localCopyOfObject=object 
    } 
    //add getter setter method for localCopyOfObject 
} 

2)さて、このクラスにリスナーを追加します。

3)この新しいLabelクラスのイベントが発生すると、localCopyOfObjectのgetterを呼び出し、MyObjectLabelに格納されているlocalCopyOfObjectのtoStringを表示します。

createIconForTheObjectは、私が示した単なるプレースホルダーメソッドです。独自の方法でアイコンを作成することができます

ありがとう

関連する問題