Added StartTurnPanel

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@102 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Bennet Gerlach 2011-05-04 15:40:34 +02:00
parent a0a32b4f2d
commit e39a539ee3
6 changed files with 427 additions and 290 deletions

View file

@ -30,9 +30,9 @@ public class JRummikub {
} catch (Exception e) {
}
IView view = new jrummikub.view.impl.View();
final IView view = new jrummikub.view.impl.View();
view.getPlayerPanel().setCurrentPlayerName("Player 1");
view.setCurrentPlayerName("Player 1");
view.getPlayerPanel().setTimeLeft(42);
view.getTablePanel().setLeftPlayerName("Player 2");
view.getTablePanel().setTopPlayerName("Player 3");
@ -54,6 +54,14 @@ public class JRummikub {
@Override
public void handle() {
System.out.println("'End turn' fired");
view.enableStartTurnPanel(true);
}
});
view.getStartTurnEvent().add(new IListener() {
@Override
public void handle() {
System.out.println("'Start turn' fired");
view.enableStartTurnPanel(false);
}
});

View file

@ -11,14 +11,6 @@ public interface IPlayerPanel {
*/
public IHandPanel getHandPanel();
/**
* Sets the current player's name
*
* @param playerName
* the player name
*/
public void setCurrentPlayerName(String playerName);
/**
* Sets the time the player has left for his turn
*

View file

@ -3,6 +3,7 @@ package jrummikub.view;
import java.util.Collection;
import jrummikub.model.Stone;
import jrummikub.util.IEvent;
/**
* The top-level view interface
@ -22,6 +23,14 @@ public interface IView {
*/
public IPlayerPanel getPlayerPanel();
/**
* Sets the current player's name
*
* @param playerName
* the player name
*/
public void setCurrentPlayerName(String playerName);
/**
* Sets the stones that are to be painted selected
*
@ -29,4 +38,19 @@ public interface IView {
* the stones to be painted selected
*/
public void setSelectedStones(Collection<Stone> stones);
/**
* Enables or disables the player's StartTurnPanel
*
* @param enable
* enable/disable
*/
public void enableStartTurnPanel(boolean enable);
/**
* The start turn event is emitted when the player wants to start his turn
*
* @return the event
*/
public IEvent getStartTurnEvent();
}

View file

@ -50,8 +50,7 @@ class PlayerPanel extends JPanel implements IPlayerPanel {
return hand;
}
@Override
public void setCurrentPlayerName(String playerName) {
void setCurrentPlayerName(String playerName) {
currentPlayerNameLabel.setText(playerName);
}
@ -209,8 +208,7 @@ class PlayerPanel extends JPanel implements IPlayerPanel {
sortByGroupsButton.setFont(sortByGroupsButton.getFont().deriveFont(
fontSize));
sortByRunsButton.setFont(sortByRunsButton.getFont()
.deriveFont(fontSize));
sortByRunsButton.setFont(sortByRunsButton.getFont().deriveFont(fontSize));
}
}

View file

@ -0,0 +1,89 @@
package jrummikub.view.impl;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import jrummikub.util.Event;
import jrummikub.util.IEvent;
@SuppressWarnings("serial")
class StartTurnPanel extends JPanel {
private final static int PANEL_INSET = 15;
private final static int PANEL_SEPARATOR = 10;
private final static float PANEL_FIRST_LINE_HEIGHT = 0.375f;
private final static int PANEL_MAX_WIDTH = 180;
private final static float MAX_BUTTON_FONT_SIZE = 12;
private JLabel startTurnLabel;
private JButton startTurnButton;
private Event startTurnEvent = new Event();
StartTurnPanel() {
setLayout(null);
setBorder(new EmptyBorder(PANEL_INSET, PANEL_INSET, PANEL_INSET,
PANEL_INSET));
startTurnLabel = new JLabel();
startTurnLabel.setHorizontalAlignment(JLabel.CENTER);
startTurnLabel.setHorizontalTextPosition(JLabel.CENTER);
startTurnLabel.setVerticalAlignment(JLabel.CENTER);
startTurnLabel.setVerticalTextPosition(JLabel.CENTER);
add(startTurnLabel);
startTurnButton = new JButton("Zug beginnen");
startTurnButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
startTurnEvent.emit();
}
});
add(startTurnButton);
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
rescale();
}
});
}
void setCurrentPlayerName(String playerName) {
startTurnLabel.setText("'" + playerName + "' ist jetzt an der Reihe.");
}
IEvent getStartTurnEvent() {
return startTurnEvent;
}
private void rescale() {
Insets insets = getInsets();
int x = insets.left, y = insets.top, width = getWidth() - insets.left
- insets.right, height = getHeight() - insets.top - insets.bottom;
if (width > PANEL_MAX_WIDTH) {
x += (width - PANEL_MAX_WIDTH) / 4;
width = width / 2 + PANEL_MAX_WIDTH / 2;
}
int firstLineHeight = (int) ((height - PANEL_SEPARATOR) * PANEL_FIRST_LINE_HEIGHT);
int buttonWidth = width;
int buttonHeight = height - PANEL_SEPARATOR - firstLineHeight;
float fontSize = (float) Math.sqrt(buttonWidth * buttonHeight) / 5;
if (fontSize > MAX_BUTTON_FONT_SIZE)
fontSize = MAX_BUTTON_FONT_SIZE;
startTurnLabel.setBounds(x, y, width, firstLineHeight);
startTurnButton.setBounds(x, y + firstLineHeight + PANEL_SEPARATOR,
buttonWidth, buttonHeight);
startTurnButton.setFont(startTurnButton.getFont().deriveFont(fontSize));
}
}

View file

@ -10,6 +10,7 @@ import javax.swing.JFrame;
import javax.swing.border.MatteBorder;
import jrummikub.model.Stone;
import jrummikub.util.IEvent;
import jrummikub.view.IPlayerPanel;
import jrummikub.view.ITablePanel;
import jrummikub.view.IView;
@ -21,6 +22,7 @@ import jrummikub.view.IView;
public class View extends JFrame implements IView {
private TablePanel table;
private PlayerPanel playerPanel;
private StartTurnPanel startTurnPanel;
private final static float PLAYER_PANEL_RATIO = 0.14f;
private final static int PLAYER_PANEL_BORDER_WIDTH = 1;
@ -30,10 +32,12 @@ public class View extends JFrame implements IView {
return 2 * (int) (d / 2);
}
@Override
public ITablePanel getTablePanel() {
return table;
}
@Override
public IPlayerPanel getPlayerPanel() {
return playerPanel;
}
@ -56,12 +60,16 @@ public class View extends JFrame implements IView {
Color.BLACK));
add(playerPanel);
startTurnPanel = new StartTurnPanel();
startTurnPanel.setVisible(false);
add(startTurnPanel);
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
Insets insets = getInsets();
int width = getWidth() - insets.left
- insets.right, height = getHeight() - insets.top - insets.bottom;
int width = getWidth() - insets.left - insets.right, height = getHeight()
- insets.top - insets.bottom;
int playerPanelHeight = even(Math.pow((double) width * width * height,
1 / 3.0) * PLAYER_PANEL_RATIO)
@ -74,6 +82,7 @@ public class View extends JFrame implements IView {
table.setBounds(0, 0, width, tableHeight);
table.validate();
playerPanel.setBounds(0, tableHeight, width, playerPanelHeight);
startTurnPanel.setBounds(0, tableHeight, width, playerPanelHeight);
}
});
@ -85,4 +94,21 @@ public class View extends JFrame implements IView {
table.setSelectedStones(stones);
playerPanel.getHandPanel().setSelectedStones(stones);
}
@Override
public void enableStartTurnPanel(boolean enable) {
playerPanel.setVisible(!enable);
startTurnPanel.setVisible(enable);
}
@Override
public void setCurrentPlayerName(String playerName) {
playerPanel.setCurrentPlayerName(playerName);
startTurnPanel.setCurrentPlayerName(playerName);
}
@Override
public IEvent getStartTurnEvent() {
return startTurnPanel.getStartTurnEvent();
}
}