123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- package ui;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.FlowLayout;
- import java.awt.Font;
- import java.awt.GridLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.ArrayList;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JComponent;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.UIManager;
- import javax.swing.border.Border;
- import javax.swing.border.CompoundBorder;
- import javax.swing.border.EmptyBorder;
- import javax.swing.border.LineBorder;
- import cards.Karte;
- import cards.KartenDeck;
- public class MainWindow {
- private JFrame frame;
- private JPanel bottomPanel, topPanel, cardPanel;
- private JButton previousPageButton, nextPageButton;
- private JLabel numberOfPagesLabel, numberOfCardsLabel;
- private int numberOfPages = 0, numberOfCards = 0, activePageNumber = 1;
- private KartenDeck kartenDeck;
- public MainWindow() {
- initialize();
- }
- private void initialize() {
- applyUIManagerTheme();
- createMasterFrame();
- createBottomPanel();
- createTopPanel();
- createCardPanel();
- createCardDeck();
- redrawCardPanel();
- updateBottomPanelNumbers();
- displayAndPackFrame();
- }
- private void createCardDeck() {
- kartenDeck = new KartenDeck();
- kartenDeck.generateFullDeck();
- }
- private void applyUIManagerTheme() {
- UIManager.put("ToolTip.background", Color.decode("#A3BE8C"));
- UIManager.put("ToolTip.border", new LineBorder(Color.decode("#2E3440"),
- 1));
- }
- private void createCardPanel() {
- cardPanel = new JPanel(new GridLayout(3, 8, 10, 10));
- Border border = cardPanel.getBorder();
- Border margin = new EmptyBorder(0, 10, 0, 10);
- cardPanel.setBorder(new CompoundBorder(border, margin));
- }
- private void displayAndPackFrame() {
- frame.add(topPanel, BorderLayout.NORTH);
- frame.add(cardPanel, BorderLayout.CENTER);
- frame.add(bottomPanel, BorderLayout.SOUTH);
- frame.pack();
- }
- private void redrawCardPanel() {
- int startIndex = (24 * (activePageNumber - 1));
- int endIndex = (Math.min((24 * (activePageNumber - 1) + 23),
- (kartenDeck.getDeckSize() - 1)));
- ArrayList<Karte> kartenListe = kartenDeck.getDeck();
- cardPanel.removeAll();
- for (int index = startIndex; index <= endIndex; index++) {
- Karte karte = kartenListe.get(index);
- String iconImagePath = "img/cards/" +
- karte.getFarbe().toString().toLowerCase() +
- "-" + karte.getWert() + ".png";
- JLabel jlabel = new JLabel();
- ImageIcon labelIcon = new ImageIcon(iconImagePath);
- jlabel.setIcon(labelIcon);
- cardPanel.add(jlabel);
- }
- cardPanel.revalidate();
- cardPanel.repaint();
- }
- private void applyNordTextTheme(JComponent jComponent) {
- jComponent.setBackground(Color.decode("#373D49"));
- jComponent.setForeground(Color.decode("#D8DEE9"));
- jComponent.setFont(new Font("sans-serif", Font.PLAIN, 24));
- }
- private void createTopPanel() {
- topPanel = new JPanel();
- topPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 10));
- topPanel.setBackground(Color.decode("#2E3440"));
- JLabel mischMaschineLabel = createMischMaschineLabel();
- JButton mischButton = createMischButton();
- mischButton.addActionListener(new ActionListener(){
- @Override
- public void actionPerformed(ActionEvent e) {
- mischButton.setEnabled(false);
- kartenDeck.mischen();
- goToPageDirection(0);
- mischButton.setEnabled(true);
- }
- });
- topPanel.add(mischMaschineLabel);
- topPanel.add(mischButton);
- }
- private JLabel createMischMaschineLabel() {
- JLabel mischmaschineLabel = new JLabel("Mischmaschine");
- applyNordTextTheme(mischmaschineLabel);
- ImageIcon mischmaschineIcon = new ImageIcon("img/shuffle-64.png");
- mischmaschineLabel.setIconTextGap(10);
- mischmaschineLabel.setIcon(mischmaschineIcon);
- return mischmaschineLabel;
- }
- private JButton createMischButton() {
- JButton mischButton = new JButton("Mischen");
- applyNordTextTheme(mischButton);
- mischButton.setFocusable(false);
- mischButton.setToolTipText("Mische alle Karten in der Maschine");
- return mischButton;
- }
- private void goToPreviousPage() {
- if (activePageNumber == 1)
- return;
- goToPageDirection(-1);
- }
- private void goToNextPage() {
- if (activePageNumber == numberOfPages)
- return;
- goToPageDirection(1);
- }
- private void goToPageDirection(int direction) {
- activePageNumber += direction;
- updateBottomPanelNumbers();
- redrawCardPanel();
- }
- private void createBottomPanel() {
- bottomPanel = new JPanel();
- bottomPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 10));
- bottomPanel.setBackground(Color.decode("#2E3440"));
- numberOfPagesLabel = createBottomLabel();
- numberOfCardsLabel = createBottomLabel();
- previousPageButton = createArrowButton("←", "vorherigen");
- nextPageButton = createArrowButton("→", "nächsten");
- nextPageButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- nextPageButton.setEnabled(false);
- goToNextPage();
- nextPageButton.setEnabled(true);
- }
- });
- previousPageButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- nextPageButton.setEnabled(false);
- goToPreviousPage();
- nextPageButton.setEnabled(true);
- }
- });
- bottomPanel.add(previousPageButton);
- bottomPanel.add(numberOfCardsLabel);
- bottomPanel.add(numberOfPagesLabel);
- bottomPanel.add(nextPageButton);
- }
- private JLabel createBottomLabel() {
- JLabel bottomLabel = new JLabel();
- bottomLabel.setForeground(Color.decode("#D8DEE9"));
- bottomLabel.setFont(new Font("sans-serif", Font.PLAIN, 24));
- return bottomLabel;
- }
- private void updateBottomPanelNumbers() {
- numberOfPages = kartenDeck.getDeckSize() / 24 + 1;
- numberOfPagesLabel.setText("Seite: " + Integer.toString(
- activePageNumber) + " / " + Integer.toString(
- numberOfPages));
- numberOfCards = kartenDeck.getDeckSize();
- numberOfCardsLabel.setText("Anzahl Karten: " + Integer.toString(
- numberOfCards));
- }
- private void createMasterFrame() {
- frame = new JFrame();
- frame.setTitle("Mischmaschine");
- frame.setLayout(new BorderLayout(10, 5));
- frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- frame.setResizable(false);
- frame.setVisible(true);
- /* spawn window centered (in floating window management mode) */
- frame.setLocationRelativeTo(null);
- BorderLayout borderLayout = new BorderLayout();
- borderLayout.setHgap(10);
- borderLayout.setVgap(10);
- frame.setLayout(borderLayout);
- }
- private JButton createArrowButton(String text, String pageTarget) {
- JButton jbutton = new JButton(text);
- applyNordTextTheme(jbutton);
- jbutton.setFocusable(false);
- jbutton.setToolTipText("Gehe zur " + pageTarget + " Seite der " +
- "Kartenanzeige");
- return jbutton;
- }
- public void show() {}
- }
|