2012-03-14 11 views
0

私はかなり新しいJavaクラスですので、基本的には下の方でお願いします。私は部屋の4つの部屋のそれぞれにタブ区画を持っています。各タブには、各部屋のライトの数に応じて、どのように各タブのボタンを指定のルームに関連付けることができますか。ルーム1のタブのライトボタンをクリックすると、イベントリスナーはボタンがルーム1に属していることを認識していますか?タブ付きペイン内の各タブのGUIアクションリスナー

ご協力いただきありがとうございます。

import java.util.ArrayList; 
import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 

public class MasterGUI extends JFrame implements ActionListener{ 

public MasterGUI(){ 

} 

public void DisplayFrame(){ 
    ArrayList<Rooms> rooms; 
    rooms = Building.getRoomList(); 

    JFrame master = new JFrame("Solar Master Control Panel"); 
    master.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    Container content = master.getContentPane(); 
    content.setBackground(Color.lightGray); 

    JTabbedPane tabbedPane = new JTabbedPane(); 
    JPanel tmpPanel; 

    for(int x = 0; x < rooms.size(); x++){ 
     tmpPanel = new JPanel(); 
     String roomName = rooms.get(x).getName(); 
     int id = rooms.get(x).getId(); 
     tabbedPane.addTab(roomName + " Room " + id, tmpPanel); 
    } 

    for(int x = 0; x < rooms.size(); x++){ 
     for(int i = 0; i < rooms.get(x).roomLights.size(); i++){ 
      int num = i + 1; 
      ((JPanel) tabbedPane.getComponentAt(x)).add(new JButton("Light" + num)); 
     } 
    } 

    master.add(tabbedPane, BorderLayout.CENTER); 
    master.setSize(800, 600); 
    content.add(tabbedPane); 
    master.setVisible(true); 
} 

public void actionPerformed(ActionEvent e){ 

} 
+0

ラッパークラス、または 'HashMap 'が動作する可能性があります。 –

+0

Javaは[for-each loop](http://www.leepoint.net/notes-java/flow/loops/foreach.html)を持っています。これは 'get(x) '呼び出し。パネルを作成するループと、ボタンを追加するループを作成するのではなく、最初に作成するときにパネルにボタンを追加することもできます。 – unholysampler

答えて

3

の最初に、ボタンがクリックされたときに、それが呼び出されるように、ボタンにActionListenerを追加する必要があります。

どのボタンがクリックされたかを区別する限り、これに対処する主な方法が2つあります。最初に、ActionEventgetSource()を使用して、イベントをトリガーしたオブジェクトへの参照を取得します。これを使用してさらに進んでいく方法を決めることができます。もう1つの選択肢はMasterGUIではなく、ActionListenerを実装することです。代わりに、呼び出されたときにどのような動作が発生する必要があるかをすぐに知るボタンごとにユニークなActionListenerを作成します。最初のオプションを使用すると、リスナーを簡単に登録できますが、ソースを特定するためにハンドラーでより多くの作業が必要になります。私は第2の方法を好む。

2

ActionPerformed()内のActionEventは、押されたボタンのソースを示します。つまり、ボタンの名前(ボタンのテキストと同じではない)に部屋を示すものを指定するか、ボタンが呼び出すコマンド文字列を指定することができます。これはActionEventからも利用できます。

JButton JavaDocをチェックしてください。アクションを扱うためのリンク、特にサポートされているボタンアクションがあります。

あなたの目標をどのように達成しようとしているかをよりよく知ることができるので、あなたの質問に少しでも集中するでしょう。

関連する問題