package jrummikub.view.impl; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.util.Iterator; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.border.LineBorder; import jrummikub.model.PlayerSettings; import jrummikub.model.Score; import jrummikub.view.IScorePanel; @SuppressWarnings("serial") class ScorePanel extends JPanel implements IScorePanel { private Iterable players; private Iterable scores; private Score accumulatedScore; public ScorePanel() { setLayout(new GridBagLayout()); setBorder(new LineBorder(Color.BLACK)); } @Override public void setPlayers(Iterable players) { this.players = players; } @Override public void setScores(Iterable scores) { this.scores = scores; } @Override public void setAccumulatedScore(Score accumulatedScore) { this.accumulatedScore = accumulatedScore; } @Override public void update() { this.removeAll(); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; c.gridwidth = GridBagConstraints.REMAINDER; addPlayerNames(); add(new JSeparator(), c); int n = 0; for (Iterator it = scores.iterator(); it.hasNext();) { addScoreRow(it.next(), ++n); } add(new JSeparator(), c); addAccumulatedScore(); } private void addPlayerNames() { GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; JLabel roundHead = new JLabel("Runde"); roundHead.setHorizontalAlignment(JLabel.CENTER); add(roundHead, c); for (Iterator it = players.iterator(); it.hasNext();) { PlayerSettings player = it.next(); if (!it.hasNext()) { c.gridwidth = GridBagConstraints.REMAINDER; } JLabel playerNameLabel = new JLabel(player.getName()); playerNameLabel.setIcon(ImageUtil.createColorIcon(player.getColor(), 12, 1)); playerNameLabel.setHorizontalAlignment(JLabel.CENTER); add(playerNameLabel, c); } } private void addScoreRow(Score score, int n) { GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; c.gridwidth = 1; JLabel roundLabel = new JLabel(Integer.toString(n)); roundLabel.setHorizontalAlignment(JLabel.CENTER); add(roundLabel, c); for (int i = 0; i < score.getPoints().size(); ++i) { if (i == score.getPoints().size()-1) { c.gridwidth = GridBagConstraints.REMAINDER; } JLabel scoreLabel = new JLabel(Integer.toString(score.getPoints().get(i))); scoreLabel.setHorizontalAlignment(JLabel.CENTER); add(scoreLabel, c); } } private void addAccumulatedScore() { GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; JLabel accumLabel = new JLabel("Gesamt"); accumLabel.setHorizontalAlignment(JLabel.CENTER); add(accumLabel, c); for (int i = 0; i < accumulatedScore.getPoints().size(); ++i) { if (i == accumulatedScore.getPoints().size()-1) { c.gridwidth = GridBagConstraints.REMAINDER; } JLabel scoreLabel = new JLabel(Integer.toString(accumulatedScore.getPoints().get(i))); scoreLabel.setHorizontalAlignment(JLabel.CENTER); add(scoreLabel, c); } } }