import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; /************************************************ * En applet som hanterar 4st spelkort i en kö * Exemplifiering av CardLayout och bildhantering * * @author Peter Mozelius * @version 1.02 * Rapportera hittade fel till: *mozelius@dsv.su.se **************************************************/ public class L6 extends JApplet implements ActionListener { private Container container; private JPanel nordPanel, mittPanel, sydPanel; private JLabel etikett, färg, valör; private JButton köKnapp; private KortPanel kp; private CardLayout cardlayout; private Queue queue; private Kort kort; public void init() { fixaGUI(); fixaBilder(); fixaKort(); }//konstruktor /** * metod som placerar ut grafik och kopplar * händelselyssningen till knappen köKnapp */ public void fixaGUI() { setSize(220,200); container = getContentPane(); //några infoetiketter i norr nordPanel = new JPanel(); nordPanel.setLayout(new GridLayout(1,3)); etikett = new JLabel(" Kortet är: "); etikett.setOpaque(true); etikett.setForeground(Color.black); färg = new JLabel(); färg.setOpaque(true); färg.setForeground(Color.black); valör = new JLabel(); valör.setOpaque(true); valör.setForeground(Color.black); nordPanel.add(etikett); nordPanel.add(färg); nordPanel.add(valör); container.add("North", nordPanel); //en köstyrande knapp i söder sydPanel = new JPanel(); köKnapp = new JButton("Hämta nästa kort i kön"); sydPanel.add(köKnapp); köKnapp.addActionListener(this); container.add("South", köKnapp); }//FixaGUI /** * lägger in bilderna i en cardlayout */ public void fixaBilder() { mittPanel = new JPanel(); mittPanel.setLayout(new CardLayout()); for(int i = 1; i < 5; i++) { kp = new KortPanel(getImage(getDocumentBase(), "kort"+i+".gif")); mittPanel.add("kort"+i,kp); } container.add(mittPanel); cardlayout = (CardLayout) mittPanel.getLayout(); }//fixabilder /** * skapar fyra kortobjekt och lägger in dem i en kö */ public void fixaKort() { queue = new Queue(); Kort kort1 = new Kort(1, 1); queue.enqueue(kort1); Kort kort2 = new Kort(2, 2); queue.enqueue(kort2); Kort kort3 = new Kort(3, 3); queue.enqueue(kort3); Kort kort4 = new Kort(4, 4); queue.enqueue(kort4); kort = (Kort)queue.dequeue(); queue.enqueue(kort); visaKort(kort); }//fixaKort /** * hanterar instanser av klassen Kort */ public void visaKort(Kort kort) { int kortFärg = kort.visaFärg(); int kortValör = kort.visaValör(); switch(kortFärg) { case 1: färg.setText("KLÖVER"); break; case 2: färg.setText("RUTER"); break; case 3: färg.setText("HJÄRTER");break; case 4: färg.setText("SPADER"); }//switch1 switch(kortValör) { case 1: valör.setText("ESS"); break; case 2: valör.setText("TVÅ"); break; case 3: valör.setText("TRE");break; case 4: valör.setText("FYRA"); }//switch2 }//visaKort /* * efter varje knapptryckning hämtas och * visas det kort som ligger först kön */ public void actionPerformed(ActionEvent e) { kort = (Kort)queue.dequeue(); visaKort(kort); queue.enqueue(kort); cardlayout.next(mittPanel); }//actionperformed }//L6 /******************************************************* * En egendefinierad hjälpklass som hjälper Lektion4 med * den icke-grafiska representationen av spelkorten. * * @author Peter Mozelius * @version 1.01 * Rapportera hittade fel till: *mozelius@dsv.su.se ********************************************************/ class Kort { private int färg; private int valör; public Kort(int färg, int valör) { this.färg = färg; this.valör = valör; }//konstruktor public int visaFärg() { return färg; } public int visaValör() { return valör; } }//Kort /********************************************************** * En subklassning av JPanel som hjälper Lektion42 att visa * bilderna på spelkorten. * * @author Peter Mozelius * @version 1.01 * Rapportera hittade fel till: *mozelius@dsv.su.se **********************************************************/ class KortPanel extends JPanel { private Image im; public KortPanel(Image im) { setSize(200, 101); setBackground(new Color(0,102,0)); this.im = im; }//konstruktor public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(im, 20, 20, this); }//paintcomponent }//KortPanel /*********************************************************** * En kö som är en utökning av java.util.Vector. Kön hjälper * klassen L6 att hantera instanser av klassen Kort. * * @author Peter Mozelius * @version 1.01 * Rapportera hittade fel till: *mozelius@dsv.su.se ***********************************************************/ class Queue extends Vector{ /** * lägger in kortobjekt sist i kön */ public void enqueue(Kort kort){ add(kort); }//enqueue /** * hämtar ut det första objektet ur kön */ public Kort dequeue(){ Kort kort = get(0); remove(0); return kort; } }//Queue