Started implementation of settings panel

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@276 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Matthias Schiffer 2011-05-25 17:33:50 +02:00
parent 656bfe905b
commit 11d616f5b0
3 changed files with 185 additions and 25 deletions

View file

@ -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);
}
}

View file

@ -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);
}
}
}

View file

@ -7,6 +7,8 @@ import java.awt.event.ComponentEvent;
import java.util.Collection; import java.util.Collection;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.border.MatteBorder; import javax.swing.border.MatteBorder;
import jrummikub.model.Stone; import jrummikub.model.Stone;
@ -21,10 +23,14 @@ import jrummikub.view.IView;
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class View extends JFrame implements IView { public class View extends JFrame implements IView {
private JLayeredPane layeredPane;
private JPanel mainLayer;
private TablePanel table; private TablePanel table;
private PlayerPanel playerPanel; private PlayerPanel playerPanel;
private StartTurnPanel startTurnPanel; private StartTurnPanel startTurnPanel;
private WinPanel winPanel; private WinPanel winPanel;
private SettingsPanel settingsPanel;
private final static float PLAYER_PANEL_RATIO = 0.14f; private final static float PLAYER_PANEL_RATIO = 0.14f;
private final static int PLAYER_PANEL_BORDER_WIDTH = 1; private final static int PLAYER_PANEL_BORDER_WIDTH = 1;
@ -59,50 +65,69 @@ public class View extends JFrame implements IView {
setSize(800, 600); setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE); setDefaultCloseOperation(EXIT_ON_CLOSE);
layeredPane = new JLayeredPane();
layeredPane.setLayout(null);
add(layeredPane);
mainLayer = new JPanel();
mainLayer.setLayout(null);
layeredPane.add(mainLayer);
table = new TablePanel(); table = new TablePanel();
add(table); mainLayer.add(table);
playerPanel = new PlayerPanel(); playerPanel = new PlayerPanel();
playerPanel.setBorder(new MatteBorder(PLAYER_PANEL_BORDER_WIDTH, 0, 0, playerPanel.setBorder(new MatteBorder(PLAYER_PANEL_BORDER_WIDTH, 0, 0, 0,
0, Color.BLACK)); Color.BLACK));
playerPanel.setVisible(false); playerPanel.setVisible(false);
add(playerPanel); mainLayer.add(playerPanel);
startTurnPanel = new StartTurnPanel(); startTurnPanel = new StartTurnPanel();
add(startTurnPanel); mainLayer.add(startTurnPanel);
winPanel = new WinPanel(); winPanel = new WinPanel();
winPanel.setVisible(false); 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() { addComponentListener(new ComponentAdapter() {
@Override @Override
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
Insets insets = getInsets(); rescale();
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);
} }
}); });
setVisible(true); 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 @Override
public void setSelectedStones(Collection<Stone> stones) { public void setSelectedStones(Collection<Stone> stones) {
table.setSelectedStones(stones); table.setSelectedStones(stones);