import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * Grafisk brukergrensesnitt for BilSalg. Brukeren kan velge mellom flere * forskjellige biler. * * @param k BilSalgKontroller-objektet som opprettet GUIet */ class BilSalgGui { /* * Følgende objekter må kunne aksesseres fra flere metoder i klassen, * og er derfor instansvariabler. */ BilSalgKontroller kontroller; JLabel info; JFrame vindu; JButton forrigeKnapp, nesteKnapp; BilSalgGui(BilSalgKontroller k) { kontroller = k; // Gjør så GUIets utseende matcher operativsystemet try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { System.exit(1); } } /** * Metode som viser selve GUIet */ public void bilSalgSkjerm() { // Oppretter selve vinduet vindu = new JFrame("Bilsalg"); // Sier at programmet skal avslutte dersom vinduet lukkes vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Tegneflate som inneholder alle visuelle komponenter JPanel infoPanel = new JPanel(new BorderLayout()); // Infotekst om den gjeldende bilen info = new JLabel(kontroller.hentFoersteBil().toString()); infoPanel.add(info, BorderLayout.NORTH); // Tegneflate som skal inneholde knapper JPanel knappPanel = new JPanel(new GridLayout(1, 3)); /* * Knapp for å hente forrige bil i lista. Starter som disabled * ettersom den første bilen som vises er på starten av lista. */ forrigeKnapp = new JButton("Forrige"); forrigeKnapp.addActionListener(new ByttKnapp(false)); forrigeKnapp.setEnabled(false); // Knapp for å velge den gjeldende bilen JButton velgKnapp = new JButton("Velg"); velgKnapp.addActionListener(new VelgKnapp()); // Knapp for å hente neste bil i lista nesteKnapp = new JButton("Neste"); nesteKnapp.addActionListener(new ByttKnapp(true)); // Plasserer knappene i tegneflaten knappPanel.add(forrigeKnapp); knappPanel.add(velgKnapp); knappPanel.add(nesteKnapp); // Plasserer knappeflaten i hovedtegneflaten infoPanel.add(knappPanel); // Plasserer hovedtegneflaten i vinduet vindu.add(infoPanel); // Gjør vinduet klart vindu.pack(); // Plasserer vinduet midt på skjermen vindu.setLocationRelativeTo(null); // Gjør vinduet synlig vindu.setVisible(true); } /** * ActionListener-objekt brukt av både "forrige"- og * "neste"-knappen. * Oppdaterer GUIet når den blir trykket på. * * @param retning hvis false: henter forrige bil, * hvis true: henter neste */ class ByttKnapp implements ActionListener { boolean retning; ByttKnapp(boolean retning) { this.retning = retning; } @Override public void actionPerformed(ActionEvent e) { /* * Oppdaterer infoteksten til å vise forrige eller * neste bil, avhengig av knappens 'retning' */ if (retning) { info.setText(kontroller.hentNesteBil().toString()); } else { info.setText(kontroller.hentForrigeBil().toString()); } // Sjekker om knappen skal deaktiveres if (!kontroller.harForrige()) { forrigeKnapp.setEnabled(false); } else { forrigeKnapp.setEnabled(true); } if (!kontroller.harNeste()) { nesteKnapp.setEnabled(false); } else { nesteKnapp.setEnabled(true); } } } /** * ActionListener-objekt brukt av "velg"-knappen. * Avslutter programmet når den blir trykket på. */ class VelgKnapp implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // Avslutter programmet vindu.dispose(); } } }