import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; import java.util.*; public class PiirtoJAppletti extends JApplet { // JList: setSelectionMode(), addListSelectionListener() private JList lista; private Kuviot kuvio = new Kuviot(); private int alkuX=0, alkuY=0,loppuX=0, loppuY=0; public PiirtoJAppletti() { // LIsätään komponentit malliin DefaultListModel DefaultListModel listaMalli = new DefaultListModel(); listaMalli.addElement("Suorakulmio"); listaMalli.addElement("Viiva"); listaMalli.addElement("Ellipsi"); // Lisätään ListModel-olio JList-komponenttiin lista = new JList(listaMalli); // Kerrallaan nykyvien rivien määrä lista.setVisibleRowCount(1); // 2. vaihtoehto on antaa JLIst-listaelementit String-taulukossa // lista = new JList(new String[] {"Suorakulmio", "Viiva", "Ellipsi"}); lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); lista.addListSelectionListener(new ListaKasittelija()); // Swing - lisätään paneeli säiliöön Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(lista, BorderLayout.SOUTH); contentPane.add(new PiirtoPaneeli(), BorderLayout.CENTER); this.addMouseListener(new HiiriKuuntelija()); } class PiirtoPaneeli extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); kuvio.piirra(g); } } // Sisäinen luokka ListaKasittelija class ListaKasittelija implements ListSelectionListener { public void valueChanged(ListSelectionEvent le) { JList lahdeOlio = (JList)le.getSource(); String valinta = (String)lahdeOlio.getSelectedValue(); kuvio.aseta_tyyppi(valinta); showStatus(valinta + " valittu"); repaint(); } } // Sisäinen luokka ListaKasittelija class HiiriKuuntelija extends MouseAdapter { public void mousePressed(MouseEvent e) { alkuX = e.getX(); alkuY = e.getY(); showStatus("nappi alas"); } public void mouseReleased(MouseEvent e) { loppuX = e.getX(); loppuY = e.getY(); showStatus("nappi vapautettu"); kuvio.aseta_koordinaatit(alkuX, alkuY, loppuX, loppuY); repaint(); } } } //-------------------------------------------------------- class Kuviot { final static int SUORAKULMIO = 0; final static int VIIVA = 1; final static int ELLIPSI = 2; // tulostettava kuvio int valittu_kuvio = SUORAKULMIO; int X = 0, Y = 0, leveys = 0, korkeus = 0; public void aseta_tyyppi(String valittu) { if (valittu.equals("Suorakulmio")) valittu_kuvio = SUORAKULMIO; if (valittu.equals("Viiva")) valittu_kuvio = VIIVA; if (valittu.equals("Ellipsi")) valittu_kuvio = ELLIPSI; } public void aseta_koordinaatit(int x, int y, int lev, int kork) { this.X = x; this.Y = y; this.leveys = lev; this.korkeus = kork; } public void piirra(Graphics g) { if (valittu_kuvio == Kuviot.SUORAKULMIO) g.fillRect(X, Y, leveys-X, korkeus-Y); else if (valittu_kuvio == Kuviot.VIIVA) g.drawLine(X, Y, leveys, korkeus); else if (valittu_kuvio == Kuviot.ELLIPSI) g.drawOval(X, Y, leveys-X, korkeus-Y); } }