diff options
Diffstat (limited to 'src/jrummikub/view/impl/View.java')
-rw-r--r-- | src/jrummikub/view/impl/View.java | 75 |
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); |