package wf.doyle.blockbuster.gui; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import java.awt.GridLayout; import java.util.Collections; import java.util.List; import javax.swing.JTabbedPane; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import wf.doyle.blockbuster.App; import wf.doyle.blockbuster.item.LibraryItem; import wf.doyle.blockbuster.item.items.printed.Book; import wf.doyle.blockbuster.item.items.printed.Periodical; import wf.doyle.blockbuster.util.EnumLineType; /** * Provides a nice (yet somewhat sketchy) front-end for BlockBuster. * * @author Jordan Doyle */ public class GUI extends JFrame { /** * Serial Version UID */ private static final long serialVersionUID = 1L; /** * Content Pane */ private JPanel contentPane; /** * Tabbed Pane */ private final JTabbedPane tabbedPane = new JTabbedPane(SwingConstants.TOP); /** * Create the frame. */ public GUI() { this.setResizable(false); this.setTitle("BlockBuster"); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e.printStackTrace(); } setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 712, 613); this.contentPane = new JPanel(); this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(this.contentPane); this.contentPane.setLayout(new GridLayout(1, 0, 0, 0)); this.contentPane.add(this.tabbedPane); List items = App.items; Collections.sort(items, (arg0, arg1) -> { return arg0.getType().toString().compareTo(arg1.getType().toString()); }); EnumLineType header = null; int top = 17; JPanel panel = null; for(LibraryItem item : items) { if(header != item.getType()) { top = 17; panel = new JPanel(); this.tabbedPane.addTab(item.getClass().getSimpleName(), null, panel, null); panel.setLayout(null); header = item.getType(); } JButton btnNewButton = new JButton("Borrow"); if(item.getLoan()) { btnNewButton.setEnabled(false); btnNewButton.setText("Unavailable"); } btnNewButton.setBounds(570, top - 4, 97, 25); panel.add(btnNewButton); JLabel lblNewLabel = new JLabel(item.getName()); lblNewLabel.setBounds(12, top, 170, 16); panel.add(lblNewLabel); JLabel lblNewLabel_2; JLabel lblNewLabel_3; final boolean borrow; if(item instanceof Book) { lblNewLabel_2 = new JLabel("" + ((Book) item).getISBN()); lblNewLabel_3 = new JLabel( ((Book) item).getAuthor()); borrow = false; } else { lblNewLabel_2 = new JLabel(item.getItemCode()); if(item instanceof Periodical) { lblNewLabel_3 = new JLabel( ((Periodical) item).getPublisher()); borrow = false; } else { lblNewLabel_3 = new JLabel("Borrowed: " + item.getTimesBorrowed()); borrow = true; } } btnNewButton.addActionListener((e) -> { if(!App.USER.hasItem() && item.toggleItem()) { if(borrow) lblNewLabel_3.setText("Borrowed: " + item.getTimesBorrowed()); App.USER.setItem(item); btnNewButton.setText("Return"); } else if(App.USER.hasItem(item)) { btnNewButton.setText("Borrow"); App.USER.removeItem(); } }); lblNewLabel_2.setBounds(220, top, 100, 16); panel.add(lblNewLabel_2); lblNewLabel_3.setBounds(370, top, 100, 16); panel.add(lblNewLabel_3); JLabel lblNewLabel_4 = new JLabel(item.getCost()); lblNewLabel_4.setBounds(520, top, 100, 16); panel.add(lblNewLabel_4); top += 38; } } }