// Grafisk biografsal, med reservation og afbestilling af stole // Dobbeltbufring for at undgå flimren import java.awt.*; import java.awt.event.*; public class Biograf5B { public static void main(String[] args) { boolean[][] sal1 = { { false, false, true, true, false, false }, { false, true, true, true, true, true }, { false, false, true, true, false, false }, { true, true, false, true, false, true }, { false, false, false, false, false, false } }; Frame f = new ClosableFrame("Sal 1"); BiografCanvas biocanvas = new BiografCanvas(sal1); f.add(biocanvas); f.pack(); f.show(); } } class BiografCanvas extends Canvas { boolean[][] bio; Image imbuf; // Ekstra skærmbuffer Graphics gbuf; // Dens grafikkomponent BiografCanvas(boolean[][] bio) { this.bio = bio; addMouseListener(new ReservationListener()); } class ReservationListener extends MouseAdapter { public void mouseClicked(MouseEvent e) { int r = (e.getY() - 10) / 20; int s = (e.getX() - 10) / 20; if (0 <= r && 0 <= s && r < bio.length && s < bio[r].length) if (e.getClickCount() > 1) bio[r][s] = false; else bio[r][s] = true; repaint(); } } public void update(Graphics gr) { paint(gr); } public void paint(Graphics gr) { setBackground(Color.white); if (gbuf == null) { // Opret imbuf og gbuf, men kun én gang imbuf = createImage(300, 300); gbuf = imbuf.getGraphics(); } gbuf.clearRect(0, 0, imbuf.getWidth(null), imbuf.getHeight(null)); for (int r=0; r