package jadex.bdi.examples.hunterprey_classic.environment; import jadex.bdi.examples.hunterprey_classic.Creature; import jadex.bdi.examples.hunterprey_classic.Hunter; import jadex.bdi.examples.hunterprey_classic.Observer; import jadex.commons.SGUI; import jadex.commons.SUtil; import jadex.commons.jtable.ObjectTableModel; import jadex.commons.jtable.ResizeableTableHeader; import jadex.commons.jtable.SorterFilterTableModel; import jadex.commons.jtable.VisibilityTableColumnModel; import java.awt.BorderLayout; import java.awt.Font; import java.awt.Image; import java.io.ObjectInputStream; import java.util.ArrayList; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; /** * Display an array of cretures in a table. */ public class CreaturePanel extends JPanel { //-------- attributes -------- /** The creatures. */ protected Creature[] creatures; /** The table model. */ protected ObjectTableModel tablemodel; /** The table. */ protected JTable table; /** The table model. */ protected ObjectTableModel tablemodel2; /** The table. */ protected JTable table2; /** The hunter image. */ protected Icon hunter; /** The prey image. */ protected Icon prey; /** The observer image. */ protected Icon observer; /** Flag to activate observer panel (only shows observers). */ protected boolean obs; //-------- constructors -------- /** * Create a creature panel. */ public CreaturePanel() { this(false); } /** * Create a creatuire or observer panel. */ public CreaturePanel(boolean obs) { this.obs = obs; Image hunter_image = ((ImageIcon)MapPanel.icons.getIcon("hunter")).getImage(); Image prey_image = ((ImageIcon)MapPanel.icons.getIcon("prey")).getImage(); Image observer_image = ((ImageIcon)MapPanel.icons.getIcon("observer")).getImage(); hunter = new ImageIcon(hunter_image.getScaledInstance(20, 20, Image.SCALE_DEFAULT)); prey = new ImageIcon(prey_image.getScaledInstance(20, 20, Image.SCALE_DEFAULT)); observer = new ImageIcon(observer_image.getScaledInstance(20, 20, Image.SCALE_DEFAULT)); if(!obs) this.tablemodel = new ObjectTableModel(new String[]{"Rank", "Type", "Name", "Age", "Points"}); else this.tablemodel = new ObjectTableModel(new String[]{"No.", "Type", "Name", "Age"}); tablemodel.setColumnClass(Integer.class, 0); tablemodel.setColumnClass(Icon.class, 1); tablemodel.setColumnClass(Integer.class, 3); if(!obs) tablemodel.setColumnClass(Integer.class, 4); SorterFilterTableModel tm = new SorterFilterTableModel(tablemodel); VisibilityTableColumnModel colmodel = new VisibilityTableColumnModel(); ResizeableTableHeader header = new ResizeableTableHeader(colmodel); header.setIncludeHeaderWidth(true); this.table = new JTable(tm, colmodel); table.setFont(new Font("Arial", Font.PLAIN, 14)); table.setRowHeight(hunter.getIconHeight()+4); table.setShowVerticalLines(false); table.createDefaultColumnsFromModel(); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setTableHeader(header); for(int i=0; i<table.getColumnModel().getColumnCount(); i++) table.getColumnModel().getColumn(i).setPreferredWidth(40); table.getColumnModel().getColumn(2).setPreferredWidth(75); // add sortrenderer tm.addMouseListener(table); // add column visibility popup colmodel.addMouseListener(table); JScrollPane sp = new JScrollPane(table); this.setLayout(new BorderLayout()); this.add("Center", sp); } /** * */ public CreaturePanel(Creature[] creatures) { this(); update(creatures); } /** * Update the creatures. */ public void update(final Creature[] creatures) { SwingUtilities.invokeLater(new Runnable() { public void run() { tablemodel.removeAllRows(); for(int i=0; i<creatures.length; i++) { if(!obs && !(creatures[i] instanceof Observer)) { tablemodel.addRow(new Object[]{ ""+(i+1), creatures[i] instanceof Hunter? hunter: prey, creatures[i].getName(), new Integer(creatures[i].getAge()), new Integer(creatures[i].getPoints())}, creatures[i]); } if(obs && (creatures[i] instanceof Observer)) { tablemodel.addRow(new Object[]{ ""+(i+1), observer, creatures[i].getName(), new Integer(creatures[i].getAge())}, creatures[i]); } } } }); } /** * Main for testing. */ public static void main(String[] args) { // Read highscore list. java.util.List creatures = new ArrayList(); try { ObjectInputStream is = new ObjectInputStream(SUtil.getResource("highscore.dmp", CreaturePanel.class.getClassLoader())); creatures = SUtil.arrayToList(is.readObject()); is.close(); } catch(Exception e) { e.printStackTrace(); } JComponent t = new CreaturePanel((Creature[])creatures.toArray(new Creature[creatures.size()])); JFrame f = new JFrame(); f.add("Center", t); f.pack(); f.setLocation(SGUI.calculateMiddlePosition(f)); f.setVisible(true); } }