import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; /******************************************************** * En applikation som hanterar 4st spelkort i en kö * Exemplifiering av CardLayout och bildhantering * * @author Peter Mozelius * @version 1.1 * Rapportera hittade fel till: mozelius@dsv.su.se * **********************************************************/ public class Lektion6 extends JFrame 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 Toolkit tk; private Queue queue; private Kort kort; public Lektion6() { super("En kort kortkö"); fixaGUI(); fixaBilder(); fixaKort(); setVisible(true); }//konstruktor /** * metod som placerar ut grafik och kopplar * händelselyssningen till knappen köKnapp */ public void fixaGUI() { setSize(220,220); container = getContentPane(); //några infoetiketter i norr nordPanel = new JPanel(); nordPanel.setLayout(new GridLayout(1,3)); etikett = new JLabel(" Kortet är: "); färg = new JLabel(); valör = new JLabel(); nordPanel.add(etikett); nordPanel.add(färg); nordPanel.add(valör); container.add(nordPanel, BorderLayout.NORTH); //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(sydPanel, BorderLayout.SOUTH); setDefaultCloseOperation(EXIT_ON_CLOSE); }//FixaGUI /** * lägger in bilderna i en cardlayout */ public void fixaBilder() { mittPanel = new JPanel(); mittPanel.setLayout(new CardLayout()); tk = Toolkit.getDefaultToolkit(); for(int i = 1; i < 5; i++) { kp = new KortPanel(tk.getImage("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 = 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 = queue.dequeue(); visaKort(kort); queue.enqueue(kort); cardlayout.next(mittPanel); }//actionperformed public static void main(String[] args) { new Lektion6(); } }//Lektion6 /********************************************************** * En egendefinierad hjälpklass som hjälper Lektion 6 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 Lektion 6 att visa * bilderna på spelkorten. * * @author Peter Mozelius * @version 1.1 * Rapportera hittade fel till: mozelius@dsv.su.se * **********************************************************/ class KortPanel extends JPanel { private Image im; public KortPanel(Image im) { setSize(200, 120); setBackground(new Color(0,140,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 * Lektion 6 att hantera objekt av klassen Kort. * * @author Peter Mozelius * @version 1.1 * 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