/******************************************************************************* * Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/epl-v10.html * * Contributors: * Mathew A. Nelson * - Initial API and implementation * Flemming N. Larsen * - Rewritten to reuse RankingDialog, which contains buttons etc. *******************************************************************************/ package net.sf.robocode.ui.dialog; import net.sf.robocode.battle.BattleResultsTableModel; import net.sf.robocode.ui.IWindowManager; import robocode.BattleResults; import javax.swing.*; import javax.swing.table.AbstractTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; /** * Dialog to display results (scores) of a battle. * <p/> * This class is just a wrapper class used for storing the window position and * dimension. * * @author Mathew A. Nelson (original) * @author Flemming N. Larsen (contributor) */ @SuppressWarnings("serial") public class ResultsDialog extends BaseScoreDialog { private JPanel buttonPanel; private JButton okButton; private JButton saveButton; private BattleResultsTableModel tableModel; private final ButtonEventHandler buttonEventHandler; public ResultsDialog(IWindowManager manager) { super(manager, true); buttonEventHandler = new ButtonEventHandler(); initialize(); addCancelByEscapeKey(); } public void setup(BattleResults[] results, int numRounds) { tableModel = new BattleResultsTableModel(results, numRounds); setTitle(((BattleResultsTableModel) getTableModel()).getTitle()); setResultsData(); table.setPreferredSize( new Dimension(table.getColumnModel().getTotalColumnWidth(), table.getModel().getRowCount() * table.getRowHeight())); table.setPreferredScrollableViewportSize(table.getPreferredSize()); } private void saveButtonActionPerformed() { windowManager.showSaveResultsDialog(tableModel); } private void okButtonActionPerformed() { setVisible(false); } @Override protected AbstractTableModel getTableModel() { return tableModel; } @Override protected JPanel getDialogContentPane() { if (contentPane == null) { contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); contentPane.add(getScrollPane(), "Center"); contentPane.add(getButtonPanel(), "South"); } return contentPane; } private JPanel getButtonPanel() { if (buttonPanel == null) { buttonPanel = new JPanel(); buttonPanel.setLayout(new BorderLayout()); buttonPanel.add(getOkButton(), "East"); buttonPanel.add(getSaveButton(), "West"); } return buttonPanel; } private JButton getOkButton() { if (okButton == null) { okButton = new JButton(); okButton.setText("OK"); okButton.addActionListener(buttonEventHandler); WindowUtil.setFixedSize(okButton, new Dimension(80, 25)); } return okButton; } private JButton getSaveButton() { if (saveButton == null) { saveButton = new JButton(); saveButton.setText("Save"); saveButton.addActionListener(buttonEventHandler); WindowUtil.setFixedSize(saveButton, new Dimension(80, 25)); } return saveButton; } private void addCancelByEscapeKey() { String CANCEL_ACTION_KEY = "CANCEL_ACTION_KEY"; int noModifiers = 0; KeyStroke escapeKey = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, noModifiers, false); InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); inputMap.put(escapeKey, CANCEL_ACTION_KEY); AbstractAction cancelAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { okButtonActionPerformed(); } }; getRootPane().getActionMap().put(CANCEL_ACTION_KEY, cancelAction); } private class ButtonEventHandler implements ActionListener { public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == ResultsDialog.this.getOkButton()) { okButtonActionPerformed(); } else if (source == ResultsDialog.this.getSaveButton()) { saveButtonActionPerformed(); } } } }