Files
jaujau/src/de/jaujau/gui/Dashboard_GUI.java
2021-01-11 21:13:57 +01:00

562 lines
19 KiB
Java

package de.jaujau.gui;
import static de.jaujau.daten.Spieler.COMPUTER;
import static de.jaujau.daten.Spieler.SPIELER;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import de.jaujau.daten.Farbe;
import de.jaujau.daten.Spieler;
import de.jaujau.daten.Spielerverwaltung;
import de.jaujau.daten.Texturenpakete;
import de.jaujau.spiellogik.Spiel;
import javax.swing.JLabel;
import java.awt.Dimension;
import java.awt.Image;
import javax.swing.JComboBox;
import javax.swing.SwingConstants;
import javax.swing.ImageIcon;
import java.awt.Rectangle;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.ComponentOrientation;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Font;
import javax.swing.JButton;
public class Dashboard_GUI extends JPanel{
private static final long serialVersionUID = -7380187913989942586L;
private JPanel panelCont = new JPanel();
private JPanel highscore = new JPanel();
private JPanel game = new JPanel();
private JPanel start = new JPanel();
private CardLayout cl = new CardLayout();
private Spielerverwaltung spielerverwaltung;
private final JPanel panel = new JPanel();
private final JPanel panel_1 = new JPanel();
private JComboBox<String> spielername = new JComboBox<String>();
private final JPanel panel_2 = new JPanel();
private final JLabel lblNewLabel_1 = new JLabel("Entwickler: Sebastian, Moritz, Fabian, Aladin, Elmar");
private final JPanel spielfeld = new JPanel();
private final JPanel player_hand = new JPanel();
private final JPanel gegner_hand = new JPanel();
private JLabel ziehstapel = new JLabel("");
private JPanel spielerkarten = new JPanel();
private JLabel labelsspieler[] = new JLabel[32];
private JLabel labelsgegner[] = new JLabel[32];
private Spiel aktuellesSpiel;
private JLabel label_aktuellerSpieler;
private Texturenpakete texturenpakete;
private final JPanel spielfeldmitte = new JPanel();
private final JPanel info_panel = new JPanel();
private final JPanel rechts = new JPanel();
private final JPanel mitte = new JPanel();
private JLabel ablagestapel = new JLabel("");
private JButton aussetzen = new JButton("Aussetzen");
private JPanel mitte_unten = new JPanel();
private JPanel mitte_center = new JPanel();
private JPanel mitte_oben = new JPanel();
private JButton btnherz = new JButton("Herz");
private JButton btnpik = new JButton("Pik");
private JButton btnkaro = new JButton("Karo");
private JButton btnkreuz = new JButton("Kreuz");
private final JLabel label_final = new JLabel("Spiel beendet");
private JScrollPane gegnerkartenpane = new JScrollPane();
private JPanel gegnerkarten = new JPanel();
private JButton getname = new JButton("setzen");
private JPanel panel_3 = new JPanel();
private final JLabel level_beschreibung = new JLabel("Aktuelles Level:");
private JLabel level_count = new JLabel("0");
private final JLabel lblNewLabel_2 = new JLabel("");
//Moving Image
public Dashboard_GUI(Spiel Spiel, Texturenpakete texturen, Spielerverwaltung speicherung) {
setMinimumSize(new Dimension(1000, 600));
texturenpakete = texturen;
spielerverwaltung = speicherung;
System.out.println("DASHBOARD_GUI: Aktives: " + texturenpakete.getAktivesPaket());
System.out.println("DASHBOARD_GUI: Anzahl: " + texturenpakete.getAnzahlPakete());
aktuellesSpiel = Spiel;
setLayout(new BorderLayout(0, 0));
panelCont.setLayout(cl);
highscore.setBackground(new Color(51, 51, 153));
panelCont.add(highscore, "1");
game.setBackground(new Color(102, 102, 153));
panelCont.add(game, "2");
game.setLayout(new BorderLayout(0, 0));
spielfeld.setBackground(new Color(102, 102, 153));
game.add(spielfeld, BorderLayout.CENTER);
spielfeld.setLayout(new BorderLayout(0, 0));
player_hand.setPreferredSize(new Dimension(100, 240));
player_hand.setBackground(new Color(169, 169, 169));
player_hand.setLayout(new BorderLayout(0, 0));
spielfeld.add(player_hand, BorderLayout.SOUTH);
JScrollPane spielerkartenpane = new JScrollPane();
spielerkartenpane.setBorder(null);
spielerkartenpane.setBackground(new Color(51, 51, 153));
spielerkartenpane.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
spielerkartenpane.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
spielerkartenpane.setPreferredSize(new Dimension(100, 240));
player_hand.add(spielerkartenpane, BorderLayout.CENTER);
spielerkarten.setBackground(new Color(51, 51, 153));
spielerkarten.setAutoscrolls(true);
spielerkarten.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
spielerkarten.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
spielerkartenpane.setViewportView(spielerkarten);
gegner_hand.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
gegner_hand.setPreferredSize(new Dimension(10, 150));
gegner_hand.setBackground(new Color(102, 102, 153));
gegner_hand.setLayout(new BorderLayout(0, 0));
spielfeld.add(gegner_hand, BorderLayout.NORTH);
gegnerkartenpane.setBorder(null);
gegnerkartenpane.setBackground(new Color(102, 102, 153));
gegnerkartenpane.setPreferredSize(new Dimension(100, 140));
gegnerkartenpane.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
gegner_hand.add(gegnerkartenpane, BorderLayout.CENTER);
gegnerkarten.setBackground(new Color(51, 51, 153));
gegnerkarten.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
gegnerkarten.setPreferredSize(new Dimension(10, 140));
gegnerkartenpane.setViewportView(gegnerkarten);
spielfeldmitte.setPreferredSize(new Dimension(100, 20));
spielfeldmitte.setLayout(new BorderLayout(0, 0));
JLabel beschreibung_aktuellerSpieler = new JLabel("Aktueller Spieler:");
beschreibung_aktuellerSpieler.setFont(new Font("Tahoma", Font.BOLD, 18));
beschreibung_aktuellerSpieler.setForeground(new Color(255, 255, 255));
info_panel.setBackground(new Color(51, 51, 153));
info_panel.add(beschreibung_aktuellerSpieler);
label_aktuellerSpieler = new JLabel("Auswahlphase");
label_aktuellerSpieler.setForeground(new Color(255, 255, 255));
label_aktuellerSpieler.setFont(new Font("Tahoma", Font.BOLD, 18));
info_panel.add(label_aktuellerSpieler);
spielfeld.add(spielfeldmitte, BorderLayout.CENTER);
spielfeldmitte.add(info_panel, BorderLayout.NORTH);
rechts.setBackground(new Color(51, 51, 153));
rechts.setPreferredSize(new Dimension(250, 10));
spielfeldmitte.add(rechts, BorderLayout.EAST);
rechts.setLayout(new BorderLayout(0, 0));
ziehstapel.setBackground(new Color(51, 51, 153));
rechts.add(ziehstapel, BorderLayout.CENTER);
mitte.setBackground(new Color(102, 102, 153));
spielfeldmitte.add(mitte, BorderLayout.CENTER);
aussetzen.setVisible(false);
aussetzen.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
aussetzen.setVisible(false);
aktuellesSpiel.aussetzen();
}
});
mitte.setLayout(new BorderLayout(0, 0));
mitte_unten.setBackground(new Color(51, 51, 153));
mitte_unten.setPreferredSize(new Dimension(150, 50));
mitte_unten.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
btnherz.setVisible(false);
mitte_unten.add(btnherz);
mitte_unten.add(aussetzen);
mitte_center.setBackground(new Color(51, 51, 153));
mitte_center.setLayout(new BorderLayout(0, 0));
ablagestapel.setBackground(new Color(51, 51, 153));
ablagestapel.setHorizontalAlignment(SwingConstants.CENTER);
ablagestapel.setHorizontalTextPosition(SwingConstants.CENTER);
ablagestapel.setAlignmentX(Component.CENTER_ALIGNMENT);
ablagestapel.setIcon(new ImageIcon(texturenpakete.getTextur(32).getScaledInstance(150, 210, Image.SCALE_SMOOTH)));
mitte_center.add(ablagestapel, BorderLayout.CENTER);
mitte.add(mitte_center);
label_final.setVisible(false);
label_final.setFont(new Font("Tahoma", Font.PLAIN, 34));
label_final.setHorizontalAlignment(SwingConstants.CENTER);
label_final.setForeground(new Color(255, 255, 255));
mitte_center.add(label_final, BorderLayout.SOUTH);
//Wunschfarben Button Listener
mitte.add(mitte_unten, BorderLayout.SOUTH);
btnpik.setVisible(false);
btnpik.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
aktuellesSpiel.wuenscher(Farbe.PIK);
showwunsch(false);
}
});
mitte_unten.add(btnpik);
btnkaro.setVisible(false);
btnkaro.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
aktuellesSpiel.wuenscher(Farbe.KARO);
showwunsch(false);
}
});
mitte_unten.add(btnkaro);
btnkreuz.setVisible(false);
btnkreuz.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
aktuellesSpiel.wuenscher(Farbe.KREUZ);
showwunsch(false);
}
});
btnherz.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
aktuellesSpiel.wuenscher(Farbe.HERZ);
showwunsch(false);
}
});
mitte_unten.add(btnkreuz);
mitte_oben.setBackground(new Color(51, 51, 153));
mitte_oben.setPreferredSize(new Dimension(150, 50));
mitte.add(mitte_oben, BorderLayout.NORTH);
mitte_oben.setLayout(new BorderLayout(0, 0));
start.setBackground(new Color(51, 51, 153));
start.setForeground(Color.WHITE);
panelCont.add(start, "3");
start.setLayout(new BorderLayout(0, 0));
panel.setBackground(new Color(51, 51, 153));
panel.setPreferredSize(new Dimension(10, 30));
start.add(panel, BorderLayout.NORTH);
JLabel lblNewLabel = new JLabel("Spielername:");
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 13));
lblNewLabel.setForeground(new Color(255, 255, 255));
panel.add(lblNewLabel);
spielername.setMinimumSize(new Dimension(60, 22));
spielername.setEditable(true);
panel.add(spielername);
panel.add(getname);
getname.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
speicherung.setaktuellerSpieler(getspielername());
}
});
panel_1.setBackground(new Color(51, 51, 153));
start.add(panel_1, BorderLayout.CENTER);
panel_1.setLayout(new BorderLayout(0, 0));
panel_3.setBackground(new Color(51, 51, 153));
panel_3.setPreferredSize(new Dimension(100, 40));
panel_1.add(panel_3, BorderLayout.NORTH);
level_beschreibung.setForeground(new Color(255, 255, 255));
level_beschreibung.setHorizontalTextPosition(SwingConstants.CENTER);
level_beschreibung.setHorizontalAlignment(SwingConstants.CENTER);
level_beschreibung.setFont(new Font("Tahoma", Font.PLAIN, 22));
panel_3.add(level_beschreibung);
level_count.setForeground(new Color(255, 255, 255));
level_count.setFont(new Font("Tahoma", Font.PLAIN, 22));
panel_3.add(level_count);
lblNewLabel_2.setForeground(Color.LIGHT_GRAY);
lblNewLabel_2.setBackground(Color.LIGHT_GRAY);
lblNewLabel_2.setHorizontalTextPosition(SwingConstants.CENTER);
lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_2.setIcon(new ImageIcon(Dashboard_GUI.class.getResource("/img/jaujau.gif")));
panel_1.add(lblNewLabel_2, BorderLayout.CENTER);
panel_2.setBackground(new Color(0, 0, 153));
start.add(panel_2, BorderLayout.SOUTH);
lblNewLabel_1.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 14));
lblNewLabel_1.setForeground(new Color(255, 255, 255));
panel_2.add(lblNewLabel_1);
highscore.setLayout(new BorderLayout(0, 0));
//Erstes Panel wird angezeigt
cl.show(panelCont, "3");
add(panelCont);
renderStart(); //Startseite beim ersten öffnen aktualisieren
}
//Spiel Panel wird gezeigt
public void showgame(Spiel Spiel){
//Neues Spiel wird übergeben
aktuellesSpiel = Spiel;
texturenpakete.pruefeLevel(spielerverwaltung.getLevel());
System.out.println("DASHBOARD: Game darstellen");
cl.show(panelCont, "2");
showwunsch(false);
aussetzen.setVisible(false);
aktuellesSpiel.spiel(this);
player_hand.setVisible(true);
label_final.setVisible(false);
ablagestapel.setVisible(true);
rechts.setVisible(true);
aktualisiereGUI();
}
public void showstart(){
System.out.println("DASHBOARD: Start darstellen");
cl.show(panelCont, "3");
renderStart();
}
public void showhighscore(){
System.out.println("DASHBOARD: Highscore darstellen");
renderHighscore();
cl.show(panelCont, "1");
repaint();
revalidate();
}
private void renderStart(){
spielername.removeAllItems();
for(int i = 0; i<spielerverwaltung.gethighscoreTabelle().length; i++) {
spielername.addItem(spielerverwaltung.gethighscoreTabelle()[i][0]);
}
}
// Highscore Tabelle
private void renderHighscore() {
for(Component c : highscore.getComponents()){
highscore.remove(c);
highscore.revalidate();
}
String[][] rowData = spielerverwaltung.gethighscoreTabelle(); //Bsp. Datensatz muss noch entfernt werden.
String[] columnNames = {"Name", "Punkte"};
for(int i = 0; i < rowData.length; i++) {
System.out.println("DASHBOARD_GUI:" + rowData[i][1]);
}
highscore.setLayout(new BorderLayout(0, 0));
JTable table = new JTable(); //Leere Tabelle
DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames) { //Tabelle formatieren und Zellen nicht bearbeitbar machen
private static final long serialVersionUID = 838285314713L;
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table.setAutoCreateRowSorter(true); //Tabelle Sortierbar durch Tabellenkopf
table.getTableHeader().setReorderingAllowed(false); //Tabelle nicht mehr drag and drop
table.setModel(tableModel);
highscore.add( new JScrollPane( table ) );
}
//Spielerhand GUI
private void aktualisiereHand() {
//Alle Elemente entfernen
for(Component c : spielerkarten.getComponents()){
spielerkarten.remove(c);
spielerkarten.revalidate();
}
//Alle Karten auf der Hand darstellen
for(int i = 0; i< aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).size(); i++){
labelsspieler[i] = new JLabel();
labelsspieler[i].setAlignmentY(Component.TOP_ALIGNMENT);
labelsspieler[i].setBounds(new Rectangle(0, 0, 120, 180));
labelsspieler[i].setSize(new Dimension(120, 180));
labelsspieler[i].setHorizontalTextPosition(SwingConstants.CENTER);
labelsspieler[i].setHorizontalAlignment(SwingConstants.CENTER);
labelsspieler[i].setName(aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).get(i).toString());
if(btnpik.isVisible() == false) {
labelsspieler[i].setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
labelsspieler[i].addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
aktuellesSpiel.karteLegen(Integer.parseInt(e.getComponent().getName()));
System.out.println("Karte: " + e.getComponent().getName() + " ausgewählt.");
aktualisiereGUI();
}
});
}
labelsspieler[i].setIcon(new ImageIcon(texturenpakete.getTextur(aktuellesSpiel.getKartensatz().getHand(Spieler.SPIELER).get(i)).getScaledInstance(150, 200, Image.SCALE_SMOOTH)));
spielerkarten.add(labelsspieler[i]);
spielerkarten.updateUI(); //Panel erneuern
}
}
//Gegnerhand GUI
private void aktualisiereGegnerHand() {
//Alle Elemente entfernen
for(Component c : gegnerkarten.getComponents()){
gegnerkarten.remove(c);
gegnerkarten.revalidate();
}
//Alle Karten auf der Hand darstellen
for(int i = 0; i< aktuellesSpiel.getKartensatz().getHand(Spieler.COMPUTER).size(); i++){
labelsgegner[i] = new JLabel();
labelsgegner[i].setAlignmentY(Component.TOP_ALIGNMENT);
labelsgegner[i].setBounds(new Rectangle(0, 0, 120, 180));
labelsgegner[i].setSize(new Dimension(120, 180));
labelsgegner[i].setHorizontalTextPosition(SwingConstants.CENTER);
labelsgegner[i].setHorizontalAlignment(SwingConstants.CENTER);
labelsgegner[i].setName(aktuellesSpiel.getKartensatz().getHand(Spieler.COMPUTER).get(i).toString());
//Immer Rückseite anzeigen
labelsgegner[i].setIcon(new ImageIcon(texturenpakete.getTextur(32).getScaledInstance(90, 130, Image.SCALE_SMOOTH)));
gegnerkarten.add(labelsgegner[i]);
gegnerkarten.updateUI(); //Panel erneuern
}
}
//
private void aktualisiereAblage(){
//Sleep oder Wait Funktion zum Verlangsamen der Anzeige
ablagestapel.setIcon(new ImageIcon(texturenpakete.getTextur(aktuellesSpiel.getKartensatz().getletzteKarte()).getScaledInstance(150, 210, Image.SCALE_SMOOTH)));
ablagestapel.revalidate();
ablagestapel.repaint();
}
private void aktualisiereSpieleranzeige() {
if(aktuellesSpiel.getamZug() == Spieler.COMPUTER) {
label_aktuellerSpieler.setText("Gegner");
label_aktuellerSpieler.setForeground(Color.RED);
}
if(aktuellesSpiel.getamZug() == Spieler.SPIELER) {
label_aktuellerSpieler.setText("Spieler");
label_aktuellerSpieler.setForeground(Color.GREEN);
}
if(aktuellesSpiel.getamZug() == null) {
label_aktuellerSpieler.setText("Auswahlphase");
label_aktuellerSpieler.setForeground(Color.WHITE);
}
}
private void aktualisiereZiehen() {
for(Component c : rechts.getComponents()){
rechts.remove(c);
rechts.revalidate();
}
System.out.println("DASHBOARD-GUI: Ziehstapel aktualisiert.");
ziehstapel = new JLabel();
ziehstapel.setAlignmentX(Component.CENTER_ALIGNMENT);
rechts.add(ziehstapel, BorderLayout.CENTER);
ziehstapel.setPreferredSize(new Dimension(242, 362));
ziehstapel.setHorizontalAlignment(SwingConstants.CENTER);
ziehstapel.setIcon(new ImageIcon(texturenpakete.getTextur(32).getScaledInstance(150, 210, Image.SCALE_SMOOTH)));
if(btnpik.isVisible() == false){
ziehstapel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
ziehstapel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
aktuellesSpiel.karteZiehen();
aktualisiereGUI();
}
});
}
}
public void showaussetzen(boolean status) {
aussetzen.setVisible(status);
mitte_unten.updateUI();
//System.out.println("DASHBOARD_GUI showaussetzen bis zum Ende aufgerufen!");
}
public void aktualisiereGUI(){
aktualisiereSpieleranzeige();
aktualisiereAblage();
aktualisiereHand();
aktualisiereGegnerHand();
aktualisiereZiehen();
revalidate();
repaint();
}
public void showwunsch(boolean status){
btnpik.setVisible(status);
btnherz.setVisible(status);
btnkaro.setVisible(status);
btnkreuz.setVisible(status);
aktualisiereGUI();
mitte_unten.updateUI();
}
private String getspielername(){
return (String) (spielername.getEditor().getItem());
}
public void gewonnen(Spieler spieler) {
if(spieler == SPIELER) {
System.out.println("Spiel gewonnen");
label_final.setText("Spiel gewonnen");
}
if(spieler == COMPUTER) {
System.out.println("Spieler verloren");
label_final.setText("Spieler verloren");
}
player_hand.setVisible(false);
label_final.setVisible(true);
ablagestapel.setVisible(false);
rechts.setVisible(false);
updateUI();
aktualisiereGUI();
}
}