1 Najprostszy program okienkowy 1.1 Kod: JAVA Materiały do laboratorium III wersja niezaawansowana Marcin Borkowski WSEiZ czerwiec 2006 public class okno1 extends Frame public okno1() ); okno1 o = new okno1(); 1.2 Zdarzenia związane z oknem obsługuje specjalny obiekt anonimowy 1.2.1 zamykanie 1.2.2 fokus 1.2.3 minimalizacja 1.3 Strumień informacji o błędach 1.4 Jakie obiekty można umieszczać w oknie/formularzu 1.4.1 Guziki (Button) 1.4.2 Pola opcji (CheckBox) 1.4.3 Tekst (Label) 1.4.4 Pole edycji (TextField) 1.5 Jak można pozycjonować obiekty w oknie 1.5.1 Ręcznie 1.5.2 Przy pomocy układu (Layout) 2 Elementy okienek 2.1 Dodajmy układ formularza GridLayout oraz najprostsze elementy czyli Buttons
2.2 Kod: public class okno1a extends Frame public okno1a() ); setlayout(new GridLayout(2,2)); Button b = new Button("A"); add(b); add(new Button("B")); okno1a o = new okno1a(); 2.3 Dodajmy samodzielnie więcej guzików 2.4 Border layout oraz inne typowe elementy formularzy: public class okno1b extends Frame public okno1b() ); setlayout(new BorderLayout()); add(new Button("A"),BorderLayout.CENTER); add(new TextField(),BorderLayout.NORTH); add(new Label("Tylko tekst"),borderlayout.south);
okno1b o = new okno1b(); 2.5 Flow layout oraz jak można reagować na zdarzenia (wciśnięcie guzika): public class okno1c extends Frame implements ActionListener public okno1c() ); setlayout(new FlowLayout()); Button b = new Button(); b.addactionlistener(this); add(b); public void actionperformed(actionevent e) Button b = (Button)e.getSource(); Button c = new Button(); c.addactionlistener(this); add(c); validate(); okno1c o = new okno1c();
3 Prosta gra logiczna: 3.1 Kod: public class okno2 extends Frame public okno2() ); setlayout(new GridLayout(8,8)); for (int j=0; j<8; j++) add(new Button(i+","+j)); okno2 o = new okno2(); 3.2 Automatyczne konwersje int->string dostępne są dopiero od wersji 1.5 (5.0) 3.3 Nazwa okienka, sposób przekazania informacji do klasy bazowej. 3.4 Jak można reagować na naciśnięcia przycisku - (ActionListener) 3.5 Kod: public class okno3 extends Frame implements ActionListener public okno3()
); setlayout(new GridLayout(8,8)); for (int j=0; j<8; j++) Button b = new Button(i+","+j); b.addactionlistener(this); add(b); public void actionperformed(actionevent e) System.out.println(e.getActionCommand()); Button b = (Button)e.getSource(); b.setlabel("!"); okno3 o = new okno3(); 3.6 Konsola tekstowa to wygodne narzędzie analizy programu, nawet okienkowego. 3.7 Jak zorganizować interakcję między przyciskami 3.8 Kod: public class okno4 extends Frame implements ActionListener private Button[][] przyciski = new Button[8][8]; public okno4() ); setlayout(new GridLayout(8,8)); for (int j=0; j<8; j++) przyciski[i][j] = new Button("0"); przyciski[i][j].setactioncommand(new Integer(i*8+ j).tostring());
przyciski[i][j].addactionlistener(this); add(przyciski[i][j]); public void actionperformed(actionevent e) Integer poz = new Integer(e.getActionCommand()); int i = poz/8 ; int j = poz%8 ; for(int k = i-1;k<=i+1;k++) if(k>=8 k<0)continue; if(przyciski[k][j].getlabel()=="0")przyciski[k][j].setlabel("1"); else przyciski[k][j].setlabel("0"); if(j-1>=0) if(przyciski[i][j-1].getlabel()=="0")przyciski[i][j-1].setlabel("1"); else przyciski[i][j-1].setlabel("0"); if(j+1<8) if(przyciski[i][j+1].getlabel()=="0")przyciski[i][j+1].setlabel("1"); else przyciski[i][j+1].setlabel("0"); for (i=0; i<8; i++) for (j=0; j<8; j++) if(przyciski[i][j].getlabel()=="0") return; settitle("koniec gry"); okno4 o = new okno4(); 3.9 Pola klas można inicjować w miejscu deklaracji 3.10 Zmiana polecenia związanego z przyciskiem 3.11 Konwersje z i na String 3.12 Dodajmy menu pozwalające wyzerować planszę oraz zakończyć grę: public class okno5 extends Frame implements ActionListener private Button[][] przyciski = new Button[8][8]; public okno5()
); setlayout(new GridLayout(8,8)); for (int j=0; j<8; j++) przyciski[i][j] = new Button("0"); przyciski[i][j].setactioncommand(new Integer(i*8+j).toString()); przyciski[i][j].addactionlistener(this); add(przyciski[i][j]); MenuBar mb = new MenuBar(); Menu b = new Menu("Gra"); b.add(new MenuItem("Zerowanie")); b.add(new MenuItem("Zakoncz")); b.addactionlistener(this); mb.add(b); setmenubar(mb); public void actionperformed(actionevent e) if(e.getactioncommand()=="zerowanie") for (int j=0; j<8; j++) przyciski[i][j].setlabel("0"); else if(e.getactioncommand()=="zakoncz") else Integer poz = new Integer(e.getActionCommand()); int i = poz/8 ; int j = poz%8 ; for(int k = i-1;k<=i+1;k++) if(k>=8 k<0)continue; if(przyciski[k][j].getlabel()=="0")przyciski[k][j].setlabel("1"); else przyciski[k][j].setlabel("0"); if(j-1>=0) if(przyciski[i][j-1].getlabel()=="0")przyciski[i][j-1].setlabel("1"); else przyciski[i][j-1].setlabel("0"); if(j+1<8) if(przyciski[i][j+1].getlabel()=="0")przyciski[i][j+1].setlabel("1"); else przyciski[i][j+1].setlabel("0"); for (i=0; i<8; i++) for (j=0; j<8; j++) if(przyciski[i][j].getlabel()=="0") return; settitle("koniec gry"); okno5 o = new okno5();
3.13 Sposób konstrukcji menu 3.14 Obsługa zdarzeń ActionCommand