import java.util.Stack; import java.awt.*; import java.awt.event.*; import javax.swing.*; /************************************************************** * En applikation som visar en enkel användning av en stack. * Stackens lagrade värden visas i en JComboBox. * * @author Peter Mozelius * @version 1.5 * Rapportera hittade fel till: *mozelius@dsv.su.se ***************************************************************/ public class Lektion5 extends JFrame implements ActionListener { private Container container; private JPanel northPanel, southPanel; private CenterPanel centerPanel; private JLabel inLabel, outLabel; private JTextField inField, outField; private JButton pushButton, popButton; private Stack stack; //Stacken är nu typbestämd /** * Konstruktor som initierar Grafik och stacken */ public Lektion5() { super("En liten Stack"); makeGUI(); stack = new Stack(); }//konstruktor /** * metod som placerar ut grafik och kopplar * händelselyssningen till knapparna */ public void makeGUI() { setSize(300,200); container = getContentPane(); //gör iordning en panel för inmatning northPanel = new JPanel(); inLabel = new JLabel(" Ett heltal att lägga på stacken: "); inField = new JTextField("0"); pushButton = new JButton("PUSH"); pushButton.addActionListener(this); northPanel.add(inLabel); northPanel.add(inField); northPanel.add(pushButton); container.add(northPanel, BorderLayout.NORTH); //lägg in en centerpanel centerPanel = new CenterPanel(); container.add(centerPanel, BorderLayout.CENTER); //gör iordning en panel för utmatning southPanel = new JPanel(); outLabel = new JLabel("Det värde du har plockat ut är:"); outField = new JTextField(" - "); popButton = new JButton("POP"); popButton.addActionListener(this); southPanel.add(outLabel); southPanel.add(outField); southPanel.add(popButton); container.add(southPanel, BorderLayout.SOUTH); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); }//makeGUI /** * beroende på vilken knapp det tryckts på så utförs * någon av stackoperationerna push eller pop */ public void actionPerformed(ActionEvent e) { if(e.getSource() == pushButton) { char c = inField.getText().charAt(0); if(Character.isDigit(c)){ Character ch = c; //implicit omvandling från primitiv till referensvariabel stack.push(ch); //lägg på stacken centerPanel.boxPush(ch); //lägg in i mittpanelns JComboBox } } else if(e.getSource() == popButton) { if(! stack.empty()) { outField.setText(""+ stack.pop());// plocka ut från stacken centerPanel.boxPop(); // ta bort ur mittpanelns JComboBox } else outField.setText("-"); } }//actionperformed public static void main(String[] args) { new Lektion5(); } }//Lektion5 /********************************************************** * En subklassning av JPanel som hjälper Lektion43 att även * visa stackens innehåll grafiskt. Klassen visar också en * enkel användning av javax.swing.JComboBox * * @author Peter Mozelius * @version 1.01 * Rapportera hittade fel till: *mozelius@dsv.su.se **********************************************************/ class CenterPanel extends JPanel { private JComboBox stackBox; /** * Konstruktor som skapar en JComboBox */ public CenterPanel() { setSize(300, 100); String[] info = {"De heltal som finns på stacken är"}; stackBox = new JComboBox(info); add(stackBox); }//konstruktor /** * lägg in ett tecken */ public void boxPush(Character ch) { stackBox.addItem(ch); } /** * plocka bort det senast inlagda tecknet */ public void boxPop() { int i = stackBox.getItemCount(); if(i > 1) stackBox.removeItemAt(i - 1); } }//CenterPanel