package fauxExchange; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.table.*; import javax.swing.border.*; public class OutputBookDlg extends JDialog { final JDialog me = this; JTable bookTable; OrderBook book; JScrollPane tablePane; String[] colNames = {"Buy Size", "Buy Price", "Sell Size", "Sell Price"}; public OutputBookDlg(JFrame parent, String title, OrderBook ob){ super(parent, title); book = ob; this.getContentPane().add(createComponents()); this.pack(); } protected JComponent createComponents(){ JPanel main = new JPanel(); JPanel center = new JPanel(); center.setBorder(new EmptyBorder(10, 10, 10, 10)); JPanel south = new JPanel(); south.setBorder(new EmptyBorder(10, 10, 15, 10)); Object[][] data = extractData(); JButton closeDlgBtn = new JButton("Close Display"); closeDlgBtn.setMnemonic('c'); closeDlgBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ me.hide(); } }); JButton refreshBtn = new JButton("Refresh Display"); refreshBtn.setMnemonic('r'); refreshBtn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ handleTableRefresh(ae); } }); bookTable = new JTable(data, colNames); // tablePane.add(bookTable); tablePane = new JScrollPane(bookTable); main.setLayout(new BorderLayout()); center.add(tablePane); main.add(center, BorderLayout.CENTER); south.add(refreshBtn); south.add(closeDlgBtn); main.add(south, BorderLayout.SOUTH); return main; } protected void handleTableRefresh(ActionEvent ae){ // tablePane.remove(bookTable); // // bookTable = new JTable(extractData(), colNames); // // tablePane.add(bookTable); // bookTable.setModel(new DefaultTableModel(extractData(), colNames)); me.repaint(); } Object[][] extractData(){ Object[][] data = null; java.text.NumberFormat nf = java.text.NumberFormat.getCurrencyInstance(); ArrayList buyOrders = new ArrayList(book.buyOrders); ArrayList sellOrders = new ArrayList(book.sellOrders); Collections.sort(buyOrders); Collections.sort(sellOrders); int size = (buyOrders.size() > sellOrders.size()) ? buyOrders.size() : sellOrders.size(); data = new Object[size + 1][]; data[0] = new Object[4]; data[0][0] = "Last Price"; data[0][1] = nf.format(book.getLastPrice()); if (book.obsc.getOrderBookState() instanceof TradingState){ data[0][2] = ""; data[0][3] = "Book in Trading"; }else{ data[0][2] = "Opening Price"; data[0][3] = nf.format(book.getOpeningPrice()); } for (int i = 1; i < size+1; i++){ data[i] = new Object [4]; if (buyOrders.size() <= i){ data[i][0] = ""; data[i][1] = ""; }else{ Order o = (Order)(buyOrders.get(i)); data[i][0] = new Integer(o.getSize()); if (!o.isMarket()){ data[i][1] = nf.format(((Order)(buyOrders.get(i))).getPrice()); }else{ data[i][1] = "Market"; } } if (sellOrders.size() <= i){ data[i][0] = ""; data[i][1] = ""; }else{ Order o = (Order)sellOrders.get(i); data[i][2] = new Integer(((Order)(sellOrders.get(i))).getSize()); if (!o.isMarket()){ data[i][3] = nf.format(o.getPrice()); }else{ data[i][3] = "Market"; } } } return data; } }