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 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);
|
||||||
|
|
Reference in a new issue