import java.awt.*; import java.applet.*; import java.awt.event.*; /** Tiedosto: MessageBox.java Tekijä: Juha Peltomäki, 12.1998. Aihe: Oman dialogin rakentaminen. Toiminta: Luokassa luodaan oma dialogi, jossa on voi olla joko yksi tai kaksi painiketta (Button). Tätä dialogia ei voi poistaa näytöltä ennenkuin valinta on tehty! Kyseessä on ns. modaalinen dialogi, joka kaappaa kaikki äiti-ikkunalle menevät syötteet itselleen. * MsgBox(Frame kehys, String viesti, boolean luo_peruuta) - Alustajametodilla luodaan kehys (Frame), jossa voi olla 1 tai 2 painiketta. * void aseta_kehys() - asettaa uuden kehyksen paikan. * void lisaa_painikkeet(boolean luo_peruuta) - Luo ja lisää painikkeet kehykseen. * void lisaa_painike(Button painike, Panel paneeli) - Lisää uuden painikkeen paneeliin. * boolean hyvaksytty() - palauttaa true, jos käyttäjä hyväksyi vastauksen. */ class MsgBox extends Dialog { boolean id; private Button hyvaksy, peruuta; Panel paneeli; /* Alustajametodi. */ MsgBox(Frame kehys, String viesti, boolean luo_peruuta) { super(kehys, "Viesti", true); setLayout(new BorderLayout()); add("Center", new Label(viesti)); lisaa_painikkeet(luo_peruuta); aseta_kehys(); pack(); id = false; setVisible(true); } public void aseta_kehys() { Dimension mitat = getToolkit().getScreenSize(); setLocation(mitat.width/4, mitat.height/4); } public void lisaa_painikkeet(boolean luo_peruuta) { paneeli = new Panel(); paneeli.setLayout(new FlowLayout()); hyvaksy = new Button("Hyväksy"); lisaa_painike(hyvaksy, paneeli); peruuta = new Button("Peruuta"); if (luo_peruuta == true) lisaa_painike(peruuta, paneeli); add("South", paneeli); } public void lisaa_painike(Button painike, Panel paneeli) { // painike = new Button(nimike); paneeli.add(painike); painike.addActionListener(new PainikeKasittelija()); } public boolean hyvaksytty() { return id; } /* Luokka käsittelee painikkeiden tapahtumat. */ class PainikeKasittelija implements ActionListener { public void actionPerformed(ActionEvent tapaht) { if (tapaht.getSource() == hyvaksy) id = true; setVisible(false); } } } /* Testaa MsgBox -luokkaa! */ public class MessageBox extends Applet { MsgBox viesti; // määritellään MsgBox-luokan olio. public void init() { // Dialogin luominen. viesti = new MsgBox(new Frame(""), "Oletko Varma?", true); requestFocus(); repaint(); // Dialogin tuhoaminen. viesti.dispose(); } public void paint(Graphics piirtopinta) { // Dialogin käyttö. if (viesti.hyvaksytty()) piirtopinta.drawString("Valinta hyväksytty!", 30, 50); else piirtopinta.drawString("Valinta peruutettu!", 30, 50); } }