2012-03-14 4 views
0

私が作成している各タブにヒーターJButtonとヒーターJSliderを追加しています。ヒーターJButtonをオフにしてヒーターJSliderで温度を選択します。別のクラスからJSliderにアクセスするGUI

JSliderの状態はfalseにプリセットされて、私はヒーターをクリックしたときのJButtonは上ヒーター、

私は、TRUEにJSliderの状況を設定し、それを必要とするをオンにする方法私はヒーターJSliderの中にアクセスすることができますHEATER BUTTONクラス?もしそうでなければ、これを行うにはほかに何か方法がありますか?

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

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 roomId = rooms.get(x).getId(); 
     tabbedPane.addTab(roomName + " Room " + roomId, tmpPanel); 

     for(int i = 0; i < rooms.get(x).roomLights.size(); i++){ 
      int lightId = rooms.get(x).roomLights.get(i).getId(); 
      JButton lights = new JButton("Light" + lightId); 
      lights.setBackground(Color.red); 
      lights.addActionListener(new LightButton(roomId, lightId)); 
      ((JPanel) tabbedPane.getComponentAt(x)).add(lights); 
     } 

     JButton heater = new JButton("Heater"); 
     heater.setBackground(Color.red); 
     heater.addActionListener(new HeaterButton(roomId)); 
     JSlider heaterSlider = new JSlider(68, 73); 
     heaterSlider.setPaintTicks(true); 
     heaterSlider.setPaintLabels(true); 
     heaterSlider.setMajorTickSpacing(1); 
     heaterSlider.addChangeListener(new HeaterSlider(roomId)); 
     heaterSlider.setEnabled(false); 
     ((JPanel) tabbedPane.getComponentAt(x)).add(heater); 
     ((JPanel) tabbedPane.getComponentAt(x)).add(heaterSlider); 
    } 
    master.add(tabbedPane, BorderLayout.CENTER); 
    master.setSize(800, 600); 
    content.add(tabbedPane); 
    master.setVisible(true); 
} 

HEATERBUTTONのCLASS

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

public class HeaterButton implements ActionListener{ 
int roomNumber; 

public HeaterButton(int room){ 
roomNumber = room; 
} 

public void actionPerformed(ActionEvent e){ 
ArrayList<Rooms> rooms; 
rooms = Building.getRoomList(); 

    if(rooms.get(roomNumber - 1).roomHeater.getHeaterStatus() == true){ 
     rooms.get(roomNumber - 1).roomHeater.setHeaterOff(); 
     ((JButton)e.getSource()).setBackground(Color.red); 

    }else{ 
     rooms.get(roomNumber - 1).roomHeater.setHeaterOn(); 
     ((JButton)e.getSource()).setBackground(Color.green); 

    } 
} 
} 
+0

あなたはコマンドパターン(http://en.wikipedia.org/wiki/Command_pattern)になっているはずです。 HeaterButtonクラスはボタンがないので混乱します。 Swingには、ActionListenerではなくインターフェイスとして使用できるActionクラスがあります。この方法で、ボタンに特定のアクションを実行させるだけです:) – Terraego

答えて

2

第1のスライダを作成し、ボタンに渡します。

変更:

heater.addActionListener(new HeaterButton(roomId)); 

へ:

heater.addActionListener(new HeaterButton(roomId, slider)); 
関連する問題