diff options
Diffstat (limited to 'src/jrummikub')
-rw-r--r-- | src/jrummikub/view/impl/ImageUtil.java | 26 | ||||
-rw-r--r-- | src/jrummikub/view/impl/SettingsPanel.java | 109 | ||||
-rw-r--r-- | src/jrummikub/view/impl/View.java | 75 |
3 files changed, 185 insertions, 25 deletions
diff --git a/src/jrummikub/view/impl/ImageUtil.java b/src/jrummikub/view/impl/ImageUtil.java new file mode 100644 index 0000000..78f825b --- /dev/null +++ b/src/jrummikub/view/impl/ImageUtil.java @@ -0,0 +1,26 @@ +package jrummikub.view.impl; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; + +import javax.swing.ImageIcon; + +class ImageUtil { + private ImageUtil() { + } + + static ImageIcon createColorIcon(Color c, int size) { + BufferedImage image = new BufferedImage(size, size, + BufferedImage.TYPE_INT_RGB); + Graphics2D g = image.createGraphics(); + + g.setColor(Color.BLACK); + g.fillRect(0, 0, size, size); + + g.setColor(c); + g.fillRect(1, 1, size - 2, size - 2); + + return new ImageIcon(image); + } +} diff --git a/src/jrummikub/view/impl/SettingsPanel.java b/src/jrummikub/view/impl/SettingsPanel.java new file mode 100644 index 0000000..9aba78c --- /dev/null +++ b/src/jrummikub/view/impl/SettingsPanel.java @@ -0,0 +1,109 @@ +package jrummikub.view.impl; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.util.LinkedList; + +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextField; +import javax.swing.border.CompoundBorder; +import javax.swing.border.EmptyBorder; +import javax.swing.border.LineBorder; + +@SuppressWarnings("serial") +class SettingsPanel extends JPanel { + private JPanel playerSetupPanel; + private JPanel playerSettingsViewport; + private JPanel ruleSetupPanel; + + private LinkedList<PlayerSettingsPanel> playerSettingsPanels = new LinkedList<PlayerSettingsPanel>(); + + private void addPlayerSettings() { + PlayerSettingsPanel panel = new PlayerSettingsPanel(); + playerSettingsPanels.add(panel); + playerSettingsViewport.add(panel, + playerSettingsViewport.getComponentCount() - 1); + } + + private void createPlayerSetupPanel() { + playerSetupPanel = new JPanel(); + playerSetupPanel.setLayout(new BorderLayout()); + + playerSettingsViewport = new JPanel(); + playerSettingsViewport.setLayout(new BoxLayout(playerSettingsViewport, + BoxLayout.Y_AXIS)); + + JScrollPane scrollPane = new JScrollPane(playerSettingsViewport, + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + playerSetupPanel.add(scrollPane); + + playerSettingsViewport.add(new JButton("Neuer Spieler")); + + addPlayerSettings(); + addPlayerSettings(); + } + + private void createRuleSetupPanel() { + ruleSetupPanel = new JPanel(); + } + + SettingsPanel() { + setLayout(new BorderLayout()); + + final JTabbedPane tabbedPane = new JTabbedPane(); + + createPlayerSetupPanel(); + tabbedPane.addTab("Spieler", playerSetupPanel); + + createRuleSetupPanel(); + tabbedPane.addTab("Regeln", ruleSetupPanel); + + add(tabbedPane); + + JButton startButton = new JButton("Spiel starten"); + add(startButton, BorderLayout.SOUTH); + + setBorder(new CompoundBorder(new LineBorder(Color.BLACK), new EmptyBorder( + 10, 10, 10, 10))); + + addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(ComponentEvent e) { + // Insets insets = getInsets(); + // int x = insets.left, y = insets.top, width = getWidth() - insets.left + // - insets.right, height = getHeight() - insets.top - insets.bottom; + + // tabbedPane.setBounds(x, y, width, height); + } + }); + } + + private static class PlayerSettingsPanel extends JPanel { + PlayerSettingsPanel() { + setLayout(new BorderLayout()); + + add(new JButton(ImageUtil.createColorIcon(Color.RED, 16)), + BorderLayout.WEST); + add(new JTextField()); + add(new JButton("\u2716"), BorderLayout.EAST); + } + + @Override + public Dimension getPreferredSize() { + return getComponent(1).getPreferredSize(); + } + + @Override + public Dimension getMaximumSize() { + return new Dimension(Integer.MAX_VALUE, getPreferredSize().height); + } + } +} 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); |