現在,javaの勉強のため「Java言語で学ぶデザインパターン入門 第3版 結城浩 著」を用いて学習しているのですが,この本にあるMediatorパターンを実行しようとすると以下のようなエラーメッセージが出てしまいました.
このエラーにあったのが初めてでどのように対処すればよいか分からなかったためここで質問させていただきました.ソースコードは以下のようになっています.
java
1public interface Colleague{ 2 public abstract void setMediator(Mediator mediator); 3 4 public abstract void setColleagueEnabled(boolean enabled); 5}
java
1import java.awt.Button; 2 3public class ColleagueButton extends Button implements Colleague{ 4 private Mediator mediator; 5 6 public ColleagueButton(String caption){ 7 super(caption); 8 } 9 10 @Override 11 public void setMediator(Mediator mediator){ 12 this.mediator = mediator; 13 } 14 15 @Override 16 public void setColleagueEnabled(boolean enabled){ 17 setEnabled(enabled); 18 } 19}
java
1import java.awt.Checkbox; 2import java.awt.CheckboxGroup; 3import java.awt.event.ItemEvent; 4import java.awt.event.ItemListener; 5 6public class ColleagueCheckbox extends Checkbox implements ItemListener, Colleague{ 7 private Mediator mediator; 8 9 public ColleagueCheckbox(String caption, CheckboxGroup group, boolean state){ 10 super(caption, group, state); 11 } 12 13 @Override 14 public void setMediator(Mediator mediator){ 15 this.mediator = mediator; 16 } 17 18 @Override 19 public void setColleagueEnabled(boolean enabled){ 20 setEnabled(enabled); 21 } 22 23 @Override 24 public void itemStateChanged(ItemEvent e){ 25 mediator.colleagueChanged(); 26 } 27}
java
1import java.awt.Color; 2import java.awt.TextField; 3import java.awt.event.TextEvent; 4import java.awt.event.TextListener; 5 6public class ColleagueTextField extends TextField implements TextListener, Colleague{ 7 private Mediator mediator; 8 9 public ColleagueTextField(String text, int columns){ 10 super(text, columns); 11 } 12 13 @Override 14 public void setMediator(Mediator mediator){ 15 this.mediator = mediator; 16 } 17 18 @Override 19 public void setColleagueEnabled(boolean enabled){ 20 setEnabled(enabled); 21 setBackground(enabled ? Color.white : Color.lightGray); 22 } 23 24 @Override 25 public void textValueChanged(TextEvent e){ 26 mediator.colleagueChanged(); 27 } 28} 29
java
1import java.awt.CheckboxGroup; 2import java.awt.Color; 3import java.awt.Frame; 4import java.awt.GridLayout; 5import java.awt.Label; 6import java.awt.event.ActionEvent; 7import java.awt.event.ActionListener; 8 9public class LoginFrame extends Frame implements ActionListener, Mediator{ 10 private ColleagueCheckbox checkGuest; 11 private ColleagueCheckbox checkLogin; 12 private ColleagueTextField textUser; 13 private ColleagueTextField textPass; 14 private ColleagueButton buttonOk; 15 private ColleagueButton buttonCancel; 16 17 public LoginFrame(String title){ 18 super(title); 19 20 setBackground(Color.lightGray); 21 22 setLayout(new GridLayout(4,2)); 23 24 createColleagues(); 25 26 add(checkGuest); 27 add(checkLogin); 28 add(new Label("Username:")); 29 add(textUser); 30 add(new Label("Password")); 31 add(textPass); 32 add(buttonOk); 33 add(buttonCancel); 34 35 colleagueChanged(); 36 37 pack(); 38 setVisible(true); 39 } 40 41 @Override 42 public void createColleagues(){ 43 CheckboxGroup g = new CheckboxGroup(); 44 checkGuest = new ColleagueCheckbox("Guest", g, true); 45 checkLogin = new ColleagueCheckbox("Login", g, false); 46 47 textUser = new ColleagueTextField("", 10); 48 textPass = new ColleagueTextField("", 10); 49 textPass.setEchoChar('*'); 50 51 buttonOk = new ColleagueButton("OK"); 52 buttonCancel = new ColleagueButton("Cancel"); 53 54 checkGuest.setMediator(this); 55 checkLogin.setMediator(this); 56 textUser.setMediator(this); 57 textPass.setMediator(this); 58 buttonOk.setMediator(this); 59 buttonCancel.setMediator(this); 60 61 checkGuest.addItemListener(checkGuest); 62 checkLogin.addItemListener(checkLogin); 63 textUser.addTextListener(textUser); 64 textPass.addTextListener(textPass); 65 buttonOk.addActionListener(this); 66 buttonCancel.addActionListener(this); 67 } 68 69 @Override 70 public void colleagueChanged(){ 71 if(checkGuest.getState()){ 72 textUser.setColleagueEnabled(false); 73 textPass.setColleagueEnabled(false); 74 buttonOk.setColleagueEnabled(true); 75 }else{ 76 textUser.setColleagueEnabled(true); 77 userpassChanged(); 78 } 79 } 80 81 private void userpassChanged(){ 82 if(textUser.getText().length() > 0){ 83 textPass.setColleagueEnabled(true); 84 if(textPass.getText().length() > 0){ 85 buttonOk.setColleagueEnabled(true); 86 }else{ 87 buttonOk.setColleagueEnabled(false); 88 } 89 }else{ 90 textPass.setColleagueEnabled(false); 91 buttonOk.setColleagueEnabled(false); 92 } 93 } 94 95 @Override 96 public void actionPerformed(ActionEvent e){ 97 System.out.println(e.toString()); 98 System.exit(0); 99 } 100}
java
1public interface Mediator{ 2 public abstract void createColleagues(); 3 4 public abstract void colleagueChanged(); 5}
java
1public class Main{ 2 public static void main(String[] args){ 3 new LoginFrame("Mediator Sample"); 4 } 5}
コンパイルは一応できていると思います.自分が使っていjavaのバージョンはjdk-17.0.2です.
何かわかる方がいらっしゃったらお願いします.
回答2件
あなたの回答
tips
プレビュー