[virtualcommons-svn] SF.net SVN: virtualcommons:[315] irrigation/trunk
Status: Beta
Brought to you by:
alllee
From: <al...@us...> - 2009-10-22 00:04:17
|
Revision: 315 http://virtualcommons.svn.sourceforge.net/virtualcommons/?rev=315&view=rev Author: alllee Date: 2009-10-22 00:04:03 +0000 (Thu, 22 Oct 2009) Log Message: ----------- - improved time progressbar and removed time left label/textfields in favor of a unified time left progressbar with text - updated debriefing instructions - testing out different layout packages - using system look and feel instead of crappy java metal look and feel Modified Paths: -------------- irrigation/trunk/pom.xml irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/CanalPanel.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/ExperimentGameWindow.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/IrrigationClient.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/IrrigationGamePanel.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/MiddleScorePanel.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/ScoreBoxPanel.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/conf/RoundConfiguration.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/ClientData.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java Modified: irrigation/trunk/pom.xml =================================================================== --- irrigation/trunk/pom.xml 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/pom.xml 2009-10-22 00:04:03 UTC (rev 315) @@ -57,6 +57,11 @@ <version>1.0.13</version> </dependency> <dependency> + <groupId>com.miglayout</groupId> + <artifactId>miglayout</artifactId> + <version>3.7.1</version> + </dependency> + <dependency> <groupId>jgoodies</groupId> <artifactId>looks</artifactId> <version>1.2.2</version> Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/CanalPanel.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/CanalPanel.java 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/CanalPanel.java 2009-10-22 00:04:03 UTC (rev 315) @@ -65,7 +65,6 @@ } /** - * This method initializes this * * @return void */ Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/ExperimentGameWindow.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/ExperimentGameWindow.java 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/ExperimentGameWindow.java 2009-10-22 00:04:03 UTC (rev 315) @@ -4,14 +4,12 @@ import java.awt.CardLayout; import java.awt.Color; import java.awt.Component; -import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -114,23 +112,14 @@ this.numberOfGeneralInstructionPages = getServerConfiguration().getNumberOfGeneralInstructionPages(); } - void initialize(Dimension screenSize) { - initGuiComponents(screenSize); - } - - private void initGuiComponents(Dimension screenSize) { + void initialize() { cardLayout = new CardLayout(); setLayout(cardLayout); - instructionsScrollPane = new JScrollPane(getInstructionsEditorPane()); - instructionsScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); - instructionsScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - // create a quiz listener and then initialize the instructions. - instructionsEditorPane.setActionListener(createQuizListener(getServerConfiguration())); - instructionsEditorPane.setCaretPosition(0); + setInstructions(getGeneralInstructions(0)); addToCardLayout(getInstructionsPanel()); - irrigationGamePanel = new IrrigationGamePanel(screenSize, client); + irrigationGamePanel = new IrrigationGamePanel(client); addToCardLayout(irrigationGamePanel); addToCardLayout(getInvestTokensPanel()); addToCardLayout(getChatPanel()); @@ -183,13 +172,22 @@ } return submitTokenPanel; } + + private JScrollPane getInstructionsScrollPane() { + if (instructionsScrollPane == null) { + instructionsScrollPane = new JScrollPane(getInstructionsEditorPane()); + instructionsScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + instructionsScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + } + return instructionsScrollPane; + } private JPanel getInstructionsPanel() { if (instructionsPanel == null) { instructionsPanel = new JPanel(); - instructionsPanel.setName("General instructions panel"); + instructionsPanel.setName("Instructions panel"); instructionsPanel.setLayout(new BorderLayout()); - instructionsPanel.add(instructionsScrollPane, BorderLayout.CENTER); + instructionsPanel.add(getInstructionsScrollPane(), BorderLayout.CENTER); instructionsPanel.add(getInstructionsNavigationPanel(), BorderLayout.PAGE_END); } return instructionsPanel; @@ -353,6 +351,10 @@ if (instructionsEditorPane == null) { instructionsEditorPane = createInstructionsEditorPane(); instructionsEditorPane.setName("Instructions editor pane"); + // create a quiz listener and then initialize the instructions. + instructionsEditorPane.setActionListener(createQuizListener(getServerConfiguration())); + instructionsEditorPane.setCaretPosition(0); + instructionsEditorPane.setBackground(Color.WHITE); } return instructionsEditorPane; } @@ -360,7 +362,7 @@ private HtmlEditorPane createInstructionsEditorPane() { HtmlEditorPane htmlEditorPane = new HtmlEditorPane(); htmlEditorPane.setEditable(false); - htmlEditorPane.setFont(new Font("serif", Font.PLAIN, 12)); + htmlEditorPane.setFont(new Font("sansserif", Font.TRUETYPE_FONT, 14)); return htmlEditorPane; } @@ -392,22 +394,13 @@ */ public void endRound(final EndRoundEvent event) { irrigationGamePanel.endRound(); - Runnable runnable = new Runnable() { + SwingUtilities.invokeLater(new Runnable() { public void run() { investedTokensTextField.setText(""); addDebriefingText(event); addCenterComponent(getInstructionsPanel()); } - }; - try { - SwingUtilities.invokeAndWait(runnable); - } - catch (InterruptedException e) { - e.printStackTrace(); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + }); info("ExperimentGameWindow finished cleanup, ending round completed."); } @@ -421,17 +414,20 @@ */ private void addDebriefingText(EndRoundEvent event) { instructionsBuilder.delete(0, instructionsBuilder.length()); - instructionsBuilder.append("<b>You were in position " + clientDataModel.getPriorityString()); + instructionsBuilder.append("<b>You are at position " + clientDataModel.getPriorityString()); instructionsBuilder.append( - "<table><thead><th>Position</th><th>Initial token endowment</th><th>Tokens invested</th><th>Tokens not invested</th>" + + "<table border='3' cellpadding='5'><thead><th>Position</th><th>Initial token endowment</th><th>Tokens invested</th><th>Tokens not invested</th>" + "<th>Tokens earned from growing crops</th><th>Total tokens earned during this round</th>" + "<th>Dollars earned during this round</th><th>Total dollars earned (including show-up bonus)</th></thead>" + "<tbody>"); double showUpBonus = clientDataModel.getServerConfiguration().getShowUpPayment(); + RoundConfiguration roundConfiguration = clientDataModel.getRoundConfiguration(); for(ClientData clientData : clientDataModel.getClientDataSortedByPriority()) { + String backgroundColor = clientData.getPriority() == clientDataModel.getPriority() ? "#FFFFCC" : "CCCCCC"; instructionsBuilder.append( - String.format("<tr><td>%s</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>$%3.2f</td><td>$%3.2f</td></tr>", - clientData.getPriorityString(), + String.format("<tr align='center' bgcolor='%s'><td>%s</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>$%3.2f</td><td>$%3.2f</td></tr>", + backgroundColor, + clientData.getPriorityString(), clientData.getMaximumTokenInvestment(), clientData.getInvestedTokens(), clientData.getUninvestedTokens(), @@ -443,81 +439,28 @@ } ClientData clientData = clientDataModel.getClientData(); - RoundConfiguration configuration = clientDataModel.getRoundConfiguration(); - instructionsBuilder.append("</tbody></table><hr/>"); instructionsBuilder.append(String.format("<h3>You received $%3.2f this past round. Your total earnings are $%3.2f, including the $%3.2f show up bonus.</h3>", clientData.getTotalDollarsEarnedThisRound(), clientData.getTotalDollarsEarned()+showUpBonus, showUpBonus)); - // FIXME: wow. change this. -// instructionsBuilder.append(String.format( -// positionString + -// -// allClientData[0].getInvestedTokens(), -// allClientData[1].getInvestedTokens(), -// allClientData[2].getInvestedTokens(), -// allClientData[3].getInvestedTokens(), -// allClientData[4].getInvestedTokens(), -// -// allClientData[0].getUninvestedTokens(), -// allClientData[1].getUninvestedTokens(), -// allClientData[2].getUninvestedTokens(), -// allClientData[3].getUninvestedTokens(), -// allClientData[4].getUninvestedTokens(), -// -// allClientData[0].getTotalTokensEarned() - allClientData[0].getUninvestedTokens(), -// allClientData[1].getTotalTokensEarned() - allClientData[1].getUninvestedTokens(), -// allClientData[2].getTotalTokensEarned() - allClientData[2].getUninvestedTokens(), -// allClientData[3].getTotalTokensEarned() - allClientData[3].getUninvestedTokens(), -// allClientData[4].getTotalTokensEarned() - allClientData[4].getUninvestedTokens(), -// -// allClientData[0].getTotalTokensEarned(), -// allClientData[1].getTotalTokensEarned(), -// allClientData[2].getTotalTokensEarned(), -// allClientData[3].getTotalTokensEarned(), -// allClientData[4].getTotalTokensEarned(), -// -// (float)dollarsPerToken*allClientData[0].getTotalTokensEarned(), -// (float)dollarsPerToken*allClientData[1].getTotalTokensEarned(), -// (float)dollarsPerToken*allClientData[2].getTotalTokensEarned(), -// (float)dollarsPerToken*allClientData[3].getTotalTokensEarned(), -// (float)dollarsPerToken*allClientData[4].getTotalTokensEarned() -// -// /* -// event.getClientData().getContributedTokens(),otherClientData.getContributedTokens(), -// 10 - event.getClientData().getContributedTokens(),10 - otherClientData.getContributedTokens(), -// event.getClientData().getAward()-(10 - event.getClientData().getContributedTokens()), -// otherClientData.getAward()-(10 - otherClientData.getContributedTokens()), -// event.getClientData().getAward(),otherClientData.getAward(), -// (float)event.getClientData().getRoundConfiguration().getDollarsPerToken()*event.getClientData().getAward(), -// (float)otherClientData.getRoundConfiguration().getDollarsPerToken()*otherClientData.getAward()*/ -// )); -// instructionsBuilder.append("</tbody></table><hr>"); -// instructionsBuilder.append(String.format("Summary: You received $1.00 at the beginning of the round and had " + -// "$%3.2f at the end of the round. Your earnings in the experiments so far are $%3.2f plus the $5.00 " + -// "showup fee, for a grand total of $%3.2f", -// (float)dollarsPerToken*clientData.getAllTokensEarnedThisRound(), -// (float)dollarsPerToken*clientData.getTotalTokens(), -// (float)dollarsPerToken*clientData.getTotalTokens() + getServerConfiguration().getShowUpPayment() -// )); //append the added practice round instructions - if(clientDataModel.getRoundConfiguration().isPracticeRound()) { - instructionsBuilder.append(" However, this is a practice round and the earnings mentioned are only for illustrative purposes " + - "and will not count towards your actual payments"); + + if (roundConfiguration.isPracticeRound() || roundConfiguration.isSecondPracticeRound()) { + instructionsBuilder.append(roundConfiguration.getPracticeRoundPaymentInstructions()); } else if (event.isLastRound()) { instructionsBuilder.append(getServerConfiguration().getFinalInstructions()); } + instructionsBuilder.append("<hr/>"); setInstructions(instructionsBuilder.toString()); } // adding the instructions into the instruction Panel private void setInstructions(final String instructions) { -// System.err.println("Setting instructions: " + instructions); SwingUtilities.invokeLater(new Runnable() { public void run() { - instructionsEditorPane.setText(instructions); - instructionsEditorPane.setCaretPosition(0); - instructionsScrollPane.revalidate(); + getInstructionsEditorPane().setText(instructions); + getInstructionsEditorPane().setCaretPosition(0); + getInstructionsScrollPane().revalidate(); } }); } @@ -526,7 +469,6 @@ return new ActionListener() { private Map<String, String> quizAnswers = configuration.getQuizAnswers(); public void actionPerformed(ActionEvent e){ - // System.err.println("In action performed with event: " + e); FormActionEvent formEvent = (FormActionEvent) e; Properties responses = formEvent.getData(); List<String> incorrectAnswers = new ArrayList<String>(); @@ -575,7 +517,7 @@ public void displayTokenContributions(final ClientData clientData) { GroupDataModel groupDataModel = clientData.getGroupDataModel(); - int totalContributedTokensPerGroup = groupDataModel.getTotalContributedTokens(); + int totalContributedTokens = groupDataModel.getTotalContributedTokens(); final StringBuilder builder = new StringBuilder(); builder.append("Infrastructure efficiency before investment: ") .append(groupDataModel.getInitialInfrastructureEfficiency()) @@ -584,14 +526,14 @@ builder.append( String.format( "Your group invested a total of %d tokens, increasing the infrastructure efficiency to %d%%.\n", - groupDataModel.getTotalContributedTokens(), groupDataModel.getInfrastructureEfficiency())); + totalContributedTokens, groupDataModel.getInfrastructureEfficiency())); if (groupDataModel.getFlowCapacity() > groupDataModel.getInitialFlowCapacity()) { builder.append("Your group's investment has increased the irrigation capacity to "); } else { - builder.append("Your group's irrigation capacity after investment is "); + builder.append("Your group's investment was not enough to increase the irrigation capacity. Your group's irrigation capacity is still "); } - builder.append(groupDataModel.getFlowCapacity()).append('.'); + builder.append(groupDataModel.getFlowCapacity()).append(" cubic feet of water per second."); SwingUtilities.invokeLater(new Runnable() { public void run() { contributionInformationTextArea.setText(builder.toString()); @@ -645,7 +587,7 @@ } public void updateRoundInstructions(RoundConfiguration roundConfiguration) { - System.err.println("Updating round instructions: " + roundConfiguration.getInstructions()); + info("Updating round instructions: " + roundConfiguration.getInstructions()); // if this is the first round, show the general instructions. if (roundConfiguration.isFirstRound()) { @@ -685,7 +627,6 @@ public void actionPerformed(ActionEvent event) { final long timeRemaining = endTime - System.currentTimeMillis(); if (timeRemaining < 0) { - sleep(); addCenterComponent(getInvestTokensPanel()); getInvestedTokensTextField().requestFocusInWindow(); timer.stop(); @@ -699,8 +640,7 @@ private void sleep() { long prevTime = System.currentTimeMillis(); while((System.currentTimeMillis() - prevTime) < 5000) { - //System.out.println("Prev "+prevTime); - //System.out.println("Current "+System.currentTimeMillis()); + chatPanel.setEnabled(false); } Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/IrrigationClient.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/IrrigationClient.java 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/IrrigationClient.java 2009-10-22 00:04:03 UTC (rev 315) @@ -1,11 +1,11 @@ package edu.asu.commons.irrigation.client; -import java.awt.Dimension; import java.util.LinkedHashMap; import java.util.Map; import javax.swing.JFrame; import javax.swing.SwingUtilities; +import javax.swing.UIManager; import edu.asu.commons.event.Event; import edu.asu.commons.event.EventChannel; @@ -74,10 +74,10 @@ initEventProcessors(); } - private void initialize(Dimension screenSize) { + private void initialize() { clientDataModel = new ClientDataModel(channel, this); experimentGameWindow = new ExperimentGameWindow(this); - experimentGameWindow.initialize(screenSize); + experimentGameWindow.initialize(); connect(); } @@ -96,14 +96,19 @@ } public static void main(String[] args) { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } + catch (Exception exception) { + exception.printStackTrace(); + } Runnable createGuiRunnable = new Runnable() { public void run() { - Dimension defaultDimension = new Dimension(500, 500); JFrame frame = new JFrame(); IrrigationClient client = new IrrigationClient(); - client.initialize(defaultDimension); + client.initialize(); frame.setTitle("Virtual Commons Experiment Client: " + client.id); - frame.setSize(1130, 600); +// frame.setSize(1130, 600); frame.getContentPane().add(client.getExperimentGameWindow()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/IrrigationGamePanel.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/IrrigationGamePanel.java 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/IrrigationGamePanel.java 2009-10-22 00:04:03 UTC (rev 315) @@ -3,8 +3,6 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; -import java.awt.Font; -import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.reflect.InvocationTargetException; @@ -16,7 +14,6 @@ import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JTextField; -import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.GroupLayout.Alignment; import javax.swing.GroupLayout.ParallelGroup; @@ -37,29 +34,21 @@ private static final long serialVersionUID = -3878952269498777014L; - public IrrigationGameWindow irrigationGameWindow; +// private IrrigationGameWindow irrigationGameWindow; - public CanalPanel canalPanel; + private CanalPanel canalPanel; //this contains the CanalPanel - private JPanel upperPanel = null; - //this contains the upstream and downstream Panel - private JPanel jPanelUpStreamWindow = null; - private JPanel jPanelDownStreamWindow = null; -// private JPanel mainIrrigationPanel = null; + private JPanel upperPanel; private ScoreBoxPanel scoreBoxPanel; - public IrrigationClient client; + private IrrigationClient client; - public Dimension screenSize; +// private Dimension screenSize; - public JProgressBar timeRemainingProgressBar; + private JProgressBar timeLeftProgressBar; - private JLabel timeRemainingLabel; - - private JTextField timeRemainingTextField; - private JButton gateSwitchButton; private JLabel irrigationCapacityLabel; @@ -80,9 +69,9 @@ private JLabel tokensNotInvestedLabel; - private JLabel waterUsedLabel; + private JLabel waterCollectedLabel; - private JTextField waterUsedTextField; + private JTextField waterCollectedTextField; private JTextField tokensNotInvestedTextField; @@ -92,9 +81,10 @@ private boolean open; - public IrrigationGamePanel(Dimension screenSize, IrrigationClient client) { + private JTextField irrigationCapacityTextField; + + public IrrigationGamePanel(IrrigationClient client) { setName("Irrigation Game Panel"); - this.screenSize = screenSize; this.client = client; initGuiComponents(); } @@ -106,17 +96,10 @@ JPanel topmostPanel = new JPanel(); - topmostPanel.setLayout(new BoxLayout(topmostPanel, BoxLayout.X_AXIS)); + topmostPanel.setLayout(new BoxLayout(topmostPanel, BoxLayout.Y_AXIS)); topmostPanel.add(getIrrigationCapacityLabel()); + topmostPanel.add(getTimeLeftProgressBar()); - JPanel timeRemainingPanel = new JPanel(); - timeRemainingPanel.setLayout(new BoxLayout(timeRemainingPanel, BoxLayout.Y_AXIS)); - timeRemainingPanel.add(getTimeRemainingProgressBar()); - timeRemainingPanel.add(getTimeRemainingPanel()); - - topmostPanel.add(timeRemainingPanel); - - setLayout(new BorderLayout()); add(topmostPanel, BorderLayout.PAGE_START); add(getUpperPanel(), BorderLayout.CENTER); @@ -136,12 +119,12 @@ GroupLayout.SequentialGroup horizontalGroup = layout.createSequentialGroup(); ParallelGroup labelsGroup = layout.createParallelGroup(); - labelsGroup.addComponent(getWaterUsedLabel()).addComponent(getTokensNotInvestedLabel()).addComponent(getTokensEarnedLabel()).addComponent(getTotalTokensEarnedLabel()); + labelsGroup.addComponent(getWaterCollectedLabel()).addComponent(getTokensNotInvestedLabel()).addComponent(getTokensEarnedLabel()).addComponent(getTotalTokensEarnedLabel()); horizontalGroup.addGroup(labelsGroup); ParallelGroup textFieldGroup = layout.createParallelGroup(); - textFieldGroup.addComponent(getWaterUsedTextField()); + textFieldGroup.addComponent(getWaterCollectedTextField()); textFieldGroup.addComponent(getTokensNotInvestedTextField()); textFieldGroup.addComponent(getTokensEarnedTextField()); textFieldGroup.addComponent(getTotalTokensEarnedTextField()); @@ -150,7 +133,7 @@ GroupLayout.SequentialGroup verticalGroup = layout.createSequentialGroup(); verticalGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) - .addComponent(getWaterUsedLabel()).addComponent(getWaterUsedTextField())); + .addComponent(getWaterCollectedLabel()).addComponent(getWaterCollectedTextField())); verticalGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(getTokensNotInvestedLabel()).addComponent(getTokensNotInvestedTextField())); @@ -175,11 +158,11 @@ return panel; } - private JTextField getWaterUsedTextField() { - if (waterUsedTextField == null) { - waterUsedTextField = createTextField(); + private JTextField getWaterCollectedTextField() { + if (waterCollectedTextField == null) { + waterCollectedTextField = createTextField(); } - return waterUsedTextField; + return waterCollectedTextField; } private JTextField createTextField() { @@ -189,11 +172,11 @@ return textField; } - private JLabel getWaterUsedLabel() { - if (waterUsedLabel == null) { - waterUsedLabel = new JLabel("Water units collected: "); + private JLabel getWaterCollectedLabel() { + if (waterCollectedLabel == null) { + waterCollectedLabel = new JLabel("Total water applied to your field: "); } - return waterUsedLabel; + return waterCollectedLabel; } private JTextField getTokensNotInvestedTextField() { @@ -237,30 +220,20 @@ return totalTokensEarnedLabel; } - private JPanel getTimeRemainingPanel() { - timeRemainingLabel = new JLabel("Time left: "); - timeRemainingLabel.setHorizontalAlignment(SwingConstants.CENTER); - timeRemainingLabel.setHorizontalTextPosition(SwingConstants.CENTER); - timeRemainingTextField = new JTextField("50 sec"); - timeRemainingTextField.setEditable(false); - timeRemainingTextField.setBackground(Color.white); - timeRemainingTextField.setFont(new Font("serif", Font.BOLD, 14)); - timeRemainingTextField.setForeground(new Color(102, 204, 255)); - timeRemainingTextField.setHorizontalAlignment(SwingConstants.CENTER); - - JPanel panel = new JPanel(); - panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - panel.add(timeRemainingLabel); - panel.add(timeRemainingTextField); - return panel; - } - private JLabel getIrrigationCapacityLabel() { if (irrigationCapacityLabel == null) { - irrigationCapacityLabel = new JLabel("Irrigation capacity: "); + irrigationCapacityLabel = new JLabel(); + irrigationCapacityLabel.setLabelFor(getIrrigationCapacityTextField()); } return irrigationCapacityLabel; } + + private JTextField getIrrigationCapacityTextField() { + if (irrigationCapacityTextField == null) { + irrigationCapacityTextField = createTextField(); + } + return irrigationCapacityTextField; + } // private JPanel getMainIrrigationPanel() { // if (mainIrrigationPanel == null) { @@ -313,49 +286,49 @@ return gateSwitchButton; } - private JPanel getCanalPanel() { + private JPanel createCanalPanel() { canalPanel = new CanalPanel(clientDataModel); return canalPanel; } - /** - * This method initializes jPanel1 - * - * @return javax.swing.JPanel - */ - private JPanel getJPanelUpStreamWindow() { - if (jPanelUpStreamWindow == null) { - jPanelUpStreamWindow = new JPanel(); - jPanelUpStreamWindow.setLayout(null); - jPanelUpStreamWindow.setBackground(new Color(186, 226, 237)); - jPanelUpStreamWindow.setBounds(new Rectangle(13, 225+100+50, 530, 326)); - jPanelUpStreamWindow.add(getControlPanel(), null); - } - return jPanelUpStreamWindow; - } +// private IrrigationGameWindow getIrrigationGameWindow() { +// if(irrigationGameWindow == null) { +// irrigationGameWindow = new IrrigationGameWindow(screenSize,client,this); +// } +// return irrigationGameWindow; +// } + +// /** +// * This method initializes jPanel1 +// * +// * @return javax.swing.JPanel +// */ +// private JPanel getJPanelUpStreamWindow() { +// if (jPanelUpStreamWindow == null) { +// jPanelUpStreamWindow = new JPanel(); +// jPanelUpStreamWindow.setLayout(null); +// jPanelUpStreamWindow.setBackground(new Color(186, 226, 237)); +// jPanelUpStreamWindow.setBounds(new Rectangle(13, 225+100+50, 530, 326)); +// jPanelUpStreamWindow.add(getIrrigationGameWindow(), null); +// } +// return jPanelUpStreamWindow; +// } +// /** +// * This method initializes jPanel3 +// * +// * @return javax.swing.JPanel +// */ +// private JPanel getJPanelDownStreamWindow() { +// if (jPanelDownStreamWindow == null) { +// jPanelDownStreamWindow = new JPanel(); +// jPanelDownStreamWindow.setLayout(null); +// jPanelDownStreamWindow.setBackground(new Color(186, 226, 237)); +// jPanelDownStreamWindow.setBounds(new Rectangle(582, 225 + 100+50, 530, 326)); +// jPanelDownStreamWindow.add(getScoreBoxPanel(),null); +// } +// return jPanelDownStreamWindow; +// } - private IrrigationGameWindow getControlPanel() { - if(irrigationGameWindow == null) { - irrigationGameWindow = new IrrigationGameWindow(screenSize,client,this); - } - return irrigationGameWindow; - } - /** - * This method initializes jPanel3 - * - * @return javax.swing.JPanel - */ - private JPanel getJPanelDownStreamWindow() { - if (jPanelDownStreamWindow == null) { - jPanelDownStreamWindow = new JPanel(); - jPanelDownStreamWindow.setLayout(null); - jPanelDownStreamWindow.setBackground(new Color(186, 226, 237)); - jPanelDownStreamWindow.setBounds(new Rectangle(582, 225 + 100+50, 530, 326)); - jPanelDownStreamWindow.add(getScoreBoxPanel(),null); - } - return jPanelDownStreamWindow; - } - private ScoreBoxPanel getScoreBoxPanel() { if(scoreBoxPanel == null){ scoreBoxPanel = new ScoreBoxPanel(); @@ -369,25 +342,33 @@ * * @return javax.swing.JProgressBar */ - private JProgressBar getTimeRemainingProgressBar() { - if (timeRemainingProgressBar == null) { - timeRemainingProgressBar = new JProgressBar(0, 50); - timeRemainingProgressBar.setBackground(Color.white); - timeRemainingProgressBar.setForeground(new Color(51, 153, 255)); + private JProgressBar getTimeLeftProgressBar() { + if (timeLeftProgressBar == null) { + timeLeftProgressBar = new JProgressBar(0, 50); + timeLeftProgressBar.setStringPainted(true); } - return timeRemainingProgressBar; + return timeLeftProgressBar; } - + + private Color getProgressBarColor(int timeLeft) { + if (timeLeft < 10) { + return Color.RED; + } + return Color.BLACK; + } + /** * Should be invoked every second throughout the experiment, from a ClientUpdateEvent sent by the server. */ public void updateClientStatus(final ClientDataModel clientDataModel) { - Runnable createGuiRunnable = new Runnable(){ + SwingUtilities.invokeLater(new Runnable() { public void run() { int timeLeft = clientDataModel.getTimeLeft(); int irrigationCapacity = clientDataModel.getGroupDataModel().getMaximumAvailableFlowCapacity(); - timeRemainingTextField.setText( timeLeft + " sec"); - timeRemainingProgressBar.setValue( timeLeft ); + String timeLeftString = String.format("%d sec", timeLeft); + timeLeftProgressBar.setValue( timeLeft ); + timeLeftProgressBar.setString(timeLeftString); + timeLeftProgressBar.setForeground( getProgressBarColor(timeLeft) ); irrigationCapacityLabel.setText( String.format("Irrigation capacity: %d cubic feet per second (cfps)", irrigationCapacity)); @@ -404,7 +385,7 @@ } } ClientData clientData = clientDataModel.getClientData(); - waterUsedTextField.setText("" + clientData.getWaterUsed()); + waterCollectedTextField.setText("" + clientData.getWaterCollected()); tokensNotInvestedTextField.setText("" + clientData.getUninvestedTokens()); tokensEarnedTextField.setText("" + clientData.getTokensEarnedFromWaterCollected()); totalTokensEarnedTextField.setText("" + clientData.getAllTokensEarnedThisRound()); @@ -413,16 +394,7 @@ } - }; - try { - SwingUtilities.invokeAndWait(createGuiRunnable); - } - catch (InterruptedException e) { - e.printStackTrace(); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } + }); } /** @@ -469,7 +441,7 @@ */ public void startRound() { open = false; - upperPanel.add(getCanalPanel(), BorderLayout.CENTER); + upperPanel.add(createCanalPanel(), BorderLayout.CENTER); getScoreBoxPanel().initialize(clientDataModel); getMiddleWindowPanel().initialize(clientDataModel); revalidate(); Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/MiddleScorePanel.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/MiddleScorePanel.java 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/MiddleScorePanel.java 2009-10-22 00:04:03 UTC (rev 315) @@ -90,7 +90,7 @@ public void update(ClientData clientData) { this.clientData = clientData; currentBandwidthText.setText("" + clientData.getAvailableFlowCapacity()); - waterUsedTextField.setText("" + clientData.getWaterUsed()); + waterUsedTextField.setText("" + clientData.getWaterCollected()); totalTokensEarnedTextField.setText("" + clientData.getAllTokensEarnedThisRound()); if(clientData.isGateOpen() && clientData.getAvailableFlowCapacity() > 0) { Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/ScoreBoxPanel.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/ScoreBoxPanel.java 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/client/ScoreBoxPanel.java 2009-10-22 00:04:03 UTC (rev 315) @@ -52,10 +52,10 @@ availableWaterLabels.add(availableWaterLabel); add(availableWaterLabel); } - // water used + // water collected add(new JLabel("Water collected:")); for (ClientData clientData : clientDataList) { - JLabel waterUsedLabel = new JLabel("" + clientData.getWaterUsed()); + JLabel waterUsedLabel = new JLabel("" + clientData.getWaterCollected()); waterUsedLabels.add(waterUsedLabel); add(waterUsedLabel); } @@ -68,7 +68,7 @@ JLabel availableWaterLabel = availableWaterLabels.get(index); availableWaterLabel.setText("" + clientData.getAvailableFlowCapacity()); JLabel waterUsedLabel = waterUsedLabels.get(index); - waterUsedLabel.setText("" + clientData.getWaterUsed()); + waterUsedLabel.setText("" + clientData.getWaterCollected()); } } Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/conf/RoundConfiguration.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/conf/RoundConfiguration.java 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/conf/RoundConfiguration.java 2009-10-22 00:04:03 UTC (rev 315) @@ -66,6 +66,11 @@ public boolean isPracticeRound() { return getBooleanProperty("practice-round"); } + + public String getPracticeRoundPaymentInstructions() { + return getProperty("practice-round-payment-instructions", + "This is a practice round so the earnings mentioned are only for illustrative purposes and <b>will not count towards your actual earnings</b>."); + } // FIXME: horrible hack.. figure out why this is here again. public boolean isSecondPracticeRound(){ Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/ClientData.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/ClientData.java 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/ClientData.java 2009-10-22 00:04:03 UTC (rev 315) @@ -256,7 +256,7 @@ waterCollected += availableFlowCapacity; } - public int getWaterUsed(){ + public int getWaterCollected(){ return waterCollected; } Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java 2009-10-21 16:52:30 UTC (rev 314) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java 2009-10-22 00:04:03 UTC (rev 315) @@ -390,8 +390,8 @@ sendEndRoundEvents(); persistRound(); cleanupRound(); - // FIXME: have to wait for .... some reason. - try { Thread.sleep(2000); } catch (InterruptedException ignored) {} + // FIXME: have to wait for .... some reason? + Utils.sleep(2000); advanceToNextRound(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |