画面の項目の状態などを一括してとりまとめるパターン。
Disableの制御などで使用するとよい。
MediatorLab.java
package gof; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JCheckBox; import javax.swing.JPanel; public class MediatorLab { public static void main(String[] args) { //フレームの作成 MyFrame myFrame = new MyFrame("Mediator"); } } class MyFrame extends JFrame implements Mediator{ //チェックボックスの定義 JCheckBox checkA; JCheckBox checkB; JCheckBox checkC; public MyFrame(String caption){ super(caption); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyButton buttonOn = new MyButton("on"); MyButton buttonOff = new MyButton("off"); // ボタンにMediatorをAdd buttonOn.addMediator(this); buttonOff.addMediator(this); //チェックボックスの作成 checkA = new JCheckBox("harada"); checkB = new JCheckBox("go"); checkC = new JCheckBox("fukuoka"); //パネルでレイアウトを調整 JPanel parentPanel = new JPanel(); parentPanel.add(buttonOn); parentPanel.add(buttonOff); JPanel childPanel = new JPanel(); childPanel.add(checkA); childPanel.add(checkB); childPanel.add(checkC); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(parentPanel, "North"); this.getContentPane().add(childPanel, "South"); this.pack(); this.setVisible(true); } //Mediator このメソッドで画面の状態を制御する public void stateChanged(ActionEvent e){ if(e.getActionCommand() == "on"){ checkA.setEnabled(true); checkB.setEnabled(true); checkC.setEnabled(true); }else{ checkA.setEnabled(false); checkB.setEnabled(false); checkC.setEnabled(false); } } } //Mediatorインタフェース。 interface Mediator{ public abstract void stateChanged(ActionEvent e); } //ボタンの定義 class MyButton extends JButton implements ActionListener{ private Mediator mediator; public MyButton(String caption){ super(caption); addActionListener(this); } public void addMediator(Mediator mediator){ this.mediator = mediator; } //ボタン押下のイベント public void actionPerformed(ActionEvent e){ mediator.stateChanged(e); } }