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:
parent
656bfe905b
commit
11d616f5b0
3 changed files with 185 additions and 25 deletions
26
src/jrummikub/view/impl/ImageUtil.java
Normal file
26
src/jrummikub/view/impl/ImageUtil.java
Normal 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);
|
||||
}
|
||||
}
|
109
src/jrummikub/view/impl/SettingsPanel.java
Normal file
109
src/jrummikub/view/impl/SettingsPanel.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
Reference in a new issue