package day16.card.ui;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import day16.card.Card;
import day16.card.CardGame;
import day16.card.NoPlayCardsException;
import day16.card.NotEnougthPlayerException;
import day16.card.Table;
/** 扑克牌 */
public class Gui {
private CardGame game;
JFrame win = new JFrame();
JTextArea tableTextArea;
JTextArea playerTextArea;
Functions functions = new Functions();
public Gui(CardGame game) {
this.game = game;
init();
}
/** 图形界面初始化 */
private void init(){
//创建主panel
JPanel main = createMainPanel();
//创建菜单栏
JMenuBar menuBar = createMenuBar();
//创建工具栏
JToolBar toolBar = createToolBar();
//创建Table(桌子)显示panel
JScrollPane tablePanel = createTablePanel();
//创建Players 显示Panel
JScrollPane playerPanel = createPlayerPanel();
//组装panel
JPanel centerPanel = new JPanel();
JPanel dataPanel = new JPanel();
centerPanel.setLayout(new BorderLayout());
dataPanel.setLayout(new GridLayout(2,1));
main.add(BorderLayout.NORTH, menuBar);
main.add(BorderLayout.CENTER, centerPanel);
centerPanel.add(BorderLayout.NORTH, toolBar);
centerPanel.add(BorderLayout.CENTER, dataPanel);
dataPanel.add(tablePanel);
dataPanel.add(playerPanel);
//把panel 添加到win
win.setContentPane(main);
win.setSize(600, 400);
win.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
functions.exit();
}
});
}
private JScrollPane createPlayerPanel() {
JScrollPane pane = new JScrollPane();
playerTextArea = new JTextArea();
pane.getViewport().add(playerTextArea);
return pane;
}
private JScrollPane createTablePanel() {
JScrollPane pane = new JScrollPane();
tableTextArea = new JTextArea();
pane.getViewport().add(tableTextArea);
return pane;
}
private JToolBar createToolBar() {
JToolBar bar = new JToolBar();
JButton add = new JButton("加人");
JButton start = new JButton("开始");
JButton deal = new JButton("发牌");
JButton shuffle = new JButton("洗牌");
JButton exit = new JButton("离开");
bar.add(add);
bar.add(start);
bar.add(deal);
bar.add(shuffle);
bar.add(exit);
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
functions.start();
}
});
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
functions.exit();
}
});
deal.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
functions.deal();
}
});
shuffle.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
functions.shuffle();
}
});
return bar;
}
private JPanel createMainPanel() {
JPanel main = new JPanel();
main.setLayout(new BorderLayout());
return main;
}
private JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu file = new JMenu("文件");
JMenu func = new JMenu("功能");
JMenuItem exitItem = new JMenuItem("退出");
JMenuItem startItem = new JMenuItem("开始");
JMenuItem addItem = new JMenuItem("添加");
menuBar.add(file);
menuBar.add(func);
file.add(exitItem);
func.add(startItem);
func.add(addItem);
exitItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
functions.exit();
}
});
startItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
functions.start();
}
});
return menuBar;
}
public void show(){
win.setVisible(true);
}
public void showGame(){
List<Card> cards = game.getCards();
tableTextArea.setText("");
int idx = 1;
for (Card card : cards) {
tableTextArea.append(card.toString() + " ");
if(idx++%10==0){
tableTextArea.append("\n");
}
}
}
public void showPlayers(){
playerTextArea.setText("");
playerTextArea.append(
"东:" + game.getPlayer(Table.EAST) + "\n");
playerTextArea.append(
"南:" + game.getPlayer(Table.SOUTH) + "\n");
playerTextArea.append(
"西:" + game.getPlayer(Table.WEST) + "\n");
playerTextArea.append(
"北:" + game.getPlayer(Table.NORTH) + "\n");
}
//功能控制器
class Functions{
public void exit(){
int ok = JOptionPane
.showConfirmDialog(win, "真的离开?", "离开",
JOptionPane.YES_NO_OPTION);
if(ok==JOptionPane.YES_OPTION){
System.exit(0);
}
}
public void start(){
game.start();
showGame();
showPlayers();
}
public void deal(){
try {
game.deal();
showGame();
showPlayers();
} catch (NoPlayCardsException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(win, e.getMessage());
} catch (NotEnougthPlayerException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(win, e.getMessage());
}
}
public void shuffle(){
try {
game.shuffle();
showGame();
showPlayers();
} catch (NoPlayCardsException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(win, e.getMessage());
}
}
}
}