summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/view/impl/View.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/view/impl/View.java')
-rw-r--r--src/jrummikub/view/impl/View.java75
1 files changed, 50 insertions, 25 deletions
diff --git a/src/jrummikub/view/impl/View.java b/src/jrummikub/view/impl/View.java
index 74c6d54..ad47375 100644
--- a/src/jrummikub/view/impl/View.java
+++ b/src/jrummikub/view/impl/View.java
@@ -7,6 +7,8 @@ import java.awt.event.ComponentEvent;
import java.util.Collection;
import javax.swing.JFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JPanel;
import javax.swing.border.MatteBorder;
import jrummikub.model.Stone;
@@ -21,10 +23,14 @@ import jrummikub.view.IView;
*/
@SuppressWarnings("serial")
public class View extends JFrame implements IView {
+ private JLayeredPane layeredPane;
+ private JPanel mainLayer;
+
private TablePanel table;
private PlayerPanel playerPanel;
private StartTurnPanel startTurnPanel;
private WinPanel winPanel;
+ private SettingsPanel settingsPanel;
private final static float PLAYER_PANEL_RATIO = 0.14f;
private final static int PLAYER_PANEL_BORDER_WIDTH = 1;
@@ -59,50 +65,69 @@ public class View extends JFrame implements IView {
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
+ layeredPane = new JLayeredPane();
+ layeredPane.setLayout(null);
+ add(layeredPane);
+
+ mainLayer = new JPanel();
+ mainLayer.setLayout(null);
+ layeredPane.add(mainLayer);
+
table = new TablePanel();
- add(table);
+ mainLayer.add(table);
playerPanel = new PlayerPanel();
- playerPanel.setBorder(new MatteBorder(PLAYER_PANEL_BORDER_WIDTH, 0, 0,
- 0, Color.BLACK));
+ playerPanel.setBorder(new MatteBorder(PLAYER_PANEL_BORDER_WIDTH, 0, 0, 0,
+ Color.BLACK));
playerPanel.setVisible(false);
- add(playerPanel);
+ mainLayer.add(playerPanel);
startTurnPanel = new StartTurnPanel();
- add(startTurnPanel);
+ mainLayer.add(startTurnPanel);
winPanel = new WinPanel();
winPanel.setVisible(false);
- add(winPanel);
+ mainLayer.add(winPanel);
+
+ settingsPanel = new SettingsPanel();
+ settingsPanel.setVisible(false);
+ layeredPane.setLayer(settingsPanel, JLayeredPane.POPUP_LAYER);
+ layeredPane.add(settingsPanel);
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 playerPanelHeight = even(Math.pow((double) width * width
- * height, 1 / 3.0)
- * PLAYER_PANEL_RATIO)
- + PLAYER_PANEL_BORDER_WIDTH;
- if (playerPanelHeight > PLAYER_PANEL_MAX_HEIGHT)
- playerPanelHeight = PLAYER_PANEL_MAX_HEIGHT;
-
- int tableHeight = height - playerPanelHeight;
-
- table.setBounds(0, 0, width, tableHeight);
- table.validate();
- playerPanel.setBounds(0, tableHeight, width, playerPanelHeight);
- startTurnPanel.setBounds(0, tableHeight, width,
- playerPanelHeight);
- winPanel.setBounds(0, tableHeight, width, playerPanelHeight);
+ rescale();
}
});
setVisible(true);
}
+ private void rescale() {
+ Insets insets = getInsets();
+ int width = getWidth() - insets.left - insets.right, height = getHeight()
+ - insets.top - insets.bottom;
+
+ layeredPane.setBounds(0, 0, width, height);
+ mainLayer.setBounds(0, 0, width, height);
+
+ int playerPanelHeight = even(Math.pow((double) width * width * height,
+ 1 / 3.0) * PLAYER_PANEL_RATIO)
+ + PLAYER_PANEL_BORDER_WIDTH;
+ if (playerPanelHeight > PLAYER_PANEL_MAX_HEIGHT)
+ playerPanelHeight = PLAYER_PANEL_MAX_HEIGHT;
+
+ int tableHeight = height - playerPanelHeight;
+
+ table.setBounds(0, 0, width, tableHeight);
+ table.validate();
+ playerPanel.setBounds(0, tableHeight, width, playerPanelHeight);
+ startTurnPanel.setBounds(0, tableHeight, width, playerPanelHeight);
+ winPanel.setBounds(0, tableHeight, width, playerPanelHeight);
+ settingsPanel.setBounds(width / 4, height / 4, width / 2, height / 2);
+ }
+
@Override
public void setSelectedStones(Collection<Stone> stones) {
table.setSelectedStones(stones);