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