Newer
Older
Assignment2B / src / MainWindow.java
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class MainWindow extends JFrame {

	private static final long serialVersionUID = 1L;
	private IList<String> elementList;
	private JTextField txtInputField;
	private JLabel lblShowText;
	private JList<String> lstElementsList;
	private JButton btnAddElement, btnRemoveElement, btnClearAllElements;
	DefaultListModel<String> model;

	public MainWindow() {
		this.setTitle("QueueWindow");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(300, 208);
		this.setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();

		/*
		 * Create the button listener.
		 * Either use one or several different inner class listeners.
		 * Also, either write the code inside the different listeners,
		 *   or write the code in different methods. Not sure what to use for this assignment.
		 * Example: btnAddElement.addActionListener(new AddElementListener);
		 */
		ButtonListener buttonListener = new ButtonListener();

		// Left panel
		JPanel leftPanel = new JPanel(new GridBagLayout());

		// lblShowText
		lblShowText = new JLabel();
		lblShowText.setText(" "); // To save a place in the grid for the label when it updates.
		c.gridx = 0;
		c.gridy = 0;
		c.fill = GridBagConstraints.HORIZONTAL;
		c.anchor = GridBagConstraints.CENTER;
		leftPanel.add(lblShowText, c);

		// txtInputField
		txtInputField = new JTextField(10);
		c.gridy++;
		leftPanel.add(txtInputField, c);

		// btnAddElement
		btnAddElement = new JButton("Add");
		c.gridy++;
		leftPanel.add(btnAddElement, c);
		btnAddElement.addActionListener(buttonListener);

		// btnRemoveElement
		btnRemoveElement = new JButton("Remove");
		c.gridy++;
		leftPanel.add(btnRemoveElement, c);
		btnRemoveElement.addActionListener(buttonListener);

		// btnClearAllElements
		btnClearAllElements = new JButton("Clear");
		c.gridy++;
		leftPanel.add(btnClearAllElements, c);
		btnClearAllElements.addActionListener(buttonListener);

		// leftPanel
		c.gridx = 0;
		c.gridy = 0;
		this.add(leftPanel, c);

		// Right panel
		// lstElementsList
		lstElementsList = new JList<String>();
		lstElementsList.setFixedCellWidth(150);
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setViewportView(lstElementsList);
		c.gridx = 1;
		c.gridy = 0;
		c.fill = GridBagConstraints.BOTH;
		this.add(scrollPane, c);

		elementList = new List<String>();

		this.setVisible(true);
	}

	private class ButtonListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			switch (e.getActionCommand()) {
			case "Add":
				addElement();
				break;
			case "Remove":
				removeElement();
				break;
			case "Clear":
				clearAllElements();
				break;
			}
		}
	}

	private void updateList() {
		model = new DefaultListModel<String>();
		for (String s : this.elementList.getAllElementsAsStrings()) {
			model.addElement(s.toString());
		}
		lstElementsList.setModel(model);
	}

	private void addElement() {
		if (!txtInputField.getText().equals("")) {
			elementList.addAt(0, txtInputField.getText());
			updateList();
		}
	}

	private void removeElement() {
		elementList.removeAt(elementList.find(lstElementsList.getSelectedValue()));
		updateList();
	}

	private void clearAllElements() {
		elementList.clear();
		updateList();
	}

	public static void main(String[] args) {
		new MainWindow();
	}
}