package auctionsniper.ui; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.NumberFormat; import javax.swing.JButton; import javax.swing.JFormattedTextField; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import auctionsniper.UserRequestListener; import auctionsniper.SniperPortfolio; import auctionsniper.UserRequestListener.Item; import auctionsniper.util.Announcer; public class MainWindow extends JFrame { public static final String APPLICATION_TITLE = "Auction Sniper"; private static final String SNIPERS_TABLE_NAME = "Snipers Table"; public static final String MAIN_WINDOW_NAME = "Auction Sniper Main"; public static final String NEW_ITEM_ID_NAME = "item id"; public static final String JOIN_BUTTON_NAME = "join button"; public static final String NEW_ITEM_STOP_PRICE_NAME = "stop price"; private final Announcer<UserRequestListener> userRequests = Announcer.to(UserRequestListener.class); public MainWindow(SniperPortfolio portfolio){ super("Auction Sniper"); setName(MainWindow.MAIN_WINDOW_NAME); fillContentPane(makeSnipersTable(portfolio), makeControls()); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void addUserRequestListener(UserRequestListener userRequestListener) { userRequests.addListener(userRequestListener); } private void fillContentPane(JTable snipersTable, JPanel controls) { final Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(controls, BorderLayout.NORTH); contentPane.add(new JScrollPane(snipersTable), BorderLayout.CENTER); } private JPanel makeControls() { final JTextField itemIdField = itemIdField(); final JFormattedTextField stopPriceField = stopPriceField(); JPanel controls = new JPanel(new FlowLayout()); controls.add(itemIdField); controls.add(stopPriceField); JButton joinAuctionButton = new JButton("Join Auction"); joinAuctionButton.setName(JOIN_BUTTON_NAME); joinAuctionButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { userRequests.announce().joinAuction(new Item(itemId(), stopPrice())); } private String itemId() { return itemIdField.getText(); } private int stopPrice() { return ((Number)stopPriceField.getValue()).intValue(); } }); controls.add(joinAuctionButton); return controls; } private JTextField itemIdField() { JTextField itemIdField = new JTextField(); itemIdField.setColumns(10); itemIdField.setName(NEW_ITEM_ID_NAME); return itemIdField; } private JFormattedTextField stopPriceField() { JFormattedTextField stopPriceField = new JFormattedTextField(NumberFormat.getIntegerInstance()); stopPriceField.setColumns(7); stopPriceField.setName(NEW_ITEM_STOP_PRICE_NAME); return stopPriceField; } private JTable makeSnipersTable(SniperPortfolio portfolio) { SnipersTableModel model = new SnipersTableModel(); portfolio.addPortfolioListener(model); JTable snipersTable = new JTable(model); snipersTable.setName(SNIPERS_TABLE_NAME); return snipersTable; } }