From d8c26176804e496e3c5c55e9fe3c2be2052819ab Mon Sep 17 00:00:00 2001 From: Josh Ashton Date: Tue, 15 Nov 2022 21:03:42 -0700 Subject: [PATCH] DefaultButton refactor: adding visual improvements, existing Classes and Methods, introducing AppTheme interface --- .../src/FileManagement/FileManager.java | 16 +++ dndBuilder/src/GUI/AppTheme.java | 28 ++++ dndBuilder/src/GUI/GUImanager.java | 129 ++++++------------ dndBuilder/src/GUI/PanelTheme.java | 13 -- .../src/GUI/Panels/ChooseRacePanel.java | 99 +++++++------- .../src/GUI/Panels/SubPanels/InfoPanel.java | 53 +++---- .../Resources/CustomAssets/DefaultButton.java | 87 ++++++++++++ .../Resources/CustomAssets/RoundedBorder.java | 33 +++++ dndBuilder/src/Resources/Fonts/SanSalvi.ttf | Bin 0 -> 41296 bytes .../Img}/dragonborn/dragonborn.jpg | Bin .../Img}/dragonborn/dragonborn2.jpg | Bin .../Img}/dragonborn/dragonborn3.jpg | Bin .../Img}/dragonborn/dragonborn4.jpg | Bin .../Img}/dragonborn/dragonborn5.jpg | Bin .../Img}/dragonborn/dragonborn6.jpg | Bin .../img => Resources/Img}/dwarf/dwarf.jpg | Bin .../{GUI/img => Resources/Img}/elf/elf.jpg | Bin .../img => Resources/Img}/gnome/gnome.jpg | Bin .../img => Resources/Img}/halfelf/halfelf.jpg | Bin .../Img}/halfling/halfling.jpg | Bin .../img => Resources/Img}/halforc/halforc.jpg | Bin .../img => Resources/Img}/human/human.jpg | Bin .../src/{GUI/img => Resources/Img}/sheet.jpg | Bin .../Img}/tiefling/tiefling.jpg | Bin 24 files changed, 281 insertions(+), 177 deletions(-) create mode 100644 dndBuilder/src/GUI/AppTheme.java delete mode 100644 dndBuilder/src/GUI/PanelTheme.java create mode 100644 dndBuilder/src/Resources/CustomAssets/DefaultButton.java create mode 100644 dndBuilder/src/Resources/CustomAssets/RoundedBorder.java create mode 100644 dndBuilder/src/Resources/Fonts/SanSalvi.ttf rename dndBuilder/src/{GUI/img => Resources/Img}/dragonborn/dragonborn.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/dragonborn/dragonborn2.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/dragonborn/dragonborn3.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/dragonborn/dragonborn4.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/dragonborn/dragonborn5.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/dragonborn/dragonborn6.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/dwarf/dwarf.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/elf/elf.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/gnome/gnome.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/halfelf/halfelf.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/halfling/halfling.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/halforc/halforc.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/human/human.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/sheet.jpg (100%) rename dndBuilder/src/{GUI/img => Resources/Img}/tiefling/tiefling.jpg (100%) diff --git a/dndBuilder/src/FileManagement/FileManager.java b/dndBuilder/src/FileManagement/FileManager.java index 7227b52..9e39c44 100644 --- a/dndBuilder/src/FileManagement/FileManager.java +++ b/dndBuilder/src/FileManagement/FileManager.java @@ -1,5 +1,6 @@ package FileManagement; +import java.awt.*; import java.io.*; import java.util.Arrays; @@ -15,6 +16,21 @@ public class FileManager { findSavedCharacters(); + loadFonts(); + + } + + private void loadFonts() { + + try { + GraphicsEnvironment ge = + GraphicsEnvironment.getLocalGraphicsEnvironment(); + ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("dndBuilder/src/Resources/Fonts/SanSalvi.ttf"))); + } catch (IOException|FontFormatException e) { + //Handle exception + System.out.println("Error finding font."); + } + } public boolean isReturninguser() { diff --git a/dndBuilder/src/GUI/AppTheme.java b/dndBuilder/src/GUI/AppTheme.java new file mode 100644 index 0000000..d113138 --- /dev/null +++ b/dndBuilder/src/GUI/AppTheme.java @@ -0,0 +1,28 @@ +package GUI; + +import java.awt.*; + +public interface AppTheme { + + public Color lightAccent = Color.decode("#EAF0CE"); + public Color lightBrown = Color.decode("#EBBE9B"); + public Color medBrown = Color.decode("#E4A677"); + + public Color darkBrown = Color.decode("#502419"); + + public Color darkestBrown = Color.decode("#1F0E0A"); + + public Color black = Color.BLACK; + + public Color confirmationBlue = Color.decode("#296EB4"); + + public Color rejectionRed = Color.decode("#A23E48"); + + public Font headerFont = new Font("SanSalvi", Font.BOLD, 45); + public Font subHeaderFont = new Font("SanSalvi", Font.PLAIN, 35); + + public Font paragraphFont = new Font("SanSalvi", Font.PLAIN, 20); + public Font buttonFont = new Font("SanSalvi", Font.PLAIN, 15); + + +} diff --git a/dndBuilder/src/GUI/GUImanager.java b/dndBuilder/src/GUI/GUImanager.java index f5a9458..ab47250 100644 --- a/dndBuilder/src/GUI/GUImanager.java +++ b/dndBuilder/src/GUI/GUImanager.java @@ -1,30 +1,12 @@ package GUI; -import Character.AbilityScores.Stats; -import Character.Classes.*; -import Character.Races.*; import GUI.Panels.*; +import Resources.CustomAssets.DefaultButton; import javax.swing.*; import java.awt.*; import java.awt.event.*; -/* private void getNextPanel() { - - - return switch (currentPanel) { - case 1 -> guiPanels.getRacePanel(); - case 2 -> guiPanels.getClassPanel(); - case 3 -> guiPanels.getAbilityScorePanel(); - case 4 -> guiPanels.getDescriptionPanel(); - case 5 -> guiPanels.getEquipmentPanel(); - case 6 -> guiPanels.getFinalizePanel(); - case 7 -> guiPanels.getLoadMenuPanel(); - default -> guiPanels.getMainMenuPanel(); - }; - - }*/ - public class GUImanager extends JFrame { private static JPanel[] panels; @@ -56,7 +38,7 @@ public class GUImanager extends JFrame { }*/ - add(createMasterPanel()); + add(panels[currentPanel]); } @@ -64,8 +46,10 @@ public class GUImanager extends JFrame { setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(new BorderLayout()); - setPreferredSize(new Dimension(730,550)); + setPreferredSize(new Dimension(750,550)); setSize(getPreferredSize()); + setResizable(false); + setLocationRelativeTo(null); try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName() ); @@ -75,38 +59,38 @@ public class GUImanager extends JFrame { } - private JPanel createMasterPanel() { + private DefaultButton createBackButton() { - JPanel masterPanel = new JPanel(); - masterPanel.add(panels[currentPanel]); + DefaultButton button = new DefaultButton("Back"); + button.addActionListener( - JPanel navigationContainer = new JPanel(new GridLayout(1, 2, 10, 10)); - navigationContainer.add(createBackButton()); - navigationContainer.add(createContinueButton()); + e -> { - //masterPanel.add(navigationContainer); + lastPanel--; + currentPanel--; + nextPanel--; + clearAndReset(); -// return masterPanel; + } - return panels[currentPanel]; + ); + + return button; } - private JButton createBackButton() { + private DefaultButton createContinueButton() { - JButton button = new JButton("Back"); + DefaultButton button = new DefaultButton("Continue"); button.addActionListener( - new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { + e -> { - lastPanel--; - currentPanel--; - nextPanel--; - clearAndReset(); + lastPanel++; + currentPanel++; + nextPanel++; + clearAndReset(); - } } ); @@ -115,46 +99,20 @@ public class GUImanager extends JFrame { } - private JButton createContinueButton() { + private DefaultButton createRandomCharacterButton() { - JButton button = new JButton("Continue"); - button.addActionListener( - - new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - - lastPanel++; - currentPanel++; - nextPanel++; - clearAndReset(); - - } - } - - ); - - return button; - - } - - private JButton createRandomCharacterButton() { - - JButton button = new JButton("Create Random Character"); + DefaultButton button = new DefaultButton("Create Random Character"); button.addActionListener( - new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { + e -> { - createRandomCharacter(); + createRandomCharacter(); - lastPanel = currentPanel; - currentPanel = 6; - nextPanel = currentPanel + 1; - clearAndReset(); + lastPanel = currentPanel; + currentPanel = 6; + nextPanel = currentPanel + 1; + clearAndReset(); - } } ); @@ -163,22 +121,19 @@ public class GUImanager extends JFrame { } - private JButton createSaveButton() { + private DefaultButton createSaveButton() { - JButton button = new JButton("Save"); + DefaultButton button = new DefaultButton("Save"); button.addActionListener( - new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { + e -> { - lastPanel = currentPanel; - currentPanel = 6; - nextPanel = currentPanel + 1; - clearAndReset(); + lastPanel = currentPanel; + currentPanel = 6; + nextPanel = currentPanel + 1; + clearAndReset(); - } - } + } ); @@ -186,6 +141,7 @@ public class GUImanager extends JFrame { } + // TODO: Need to implement. private void createRandomCharacter() { @@ -196,10 +152,11 @@ public class GUImanager extends JFrame { getContentPane().removeAll(); - add(createMasterPanel()); + add(panels[currentPanel]); repaint(); revalidate(); + pack(); } diff --git a/dndBuilder/src/GUI/PanelTheme.java b/dndBuilder/src/GUI/PanelTheme.java deleted file mode 100644 index f599b8e..0000000 --- a/dndBuilder/src/GUI/PanelTheme.java +++ /dev/null @@ -1,13 +0,0 @@ -package GUI; - -import java.awt.*; - -public interface PanelTheme { - - public Color deepRed = new Color(165, 42, 42); - public Color lightBrown = new Color(222, 184, 135); - public Color darkBrown = new Color(205, 133, 63); - - public Color black = new Color(0, 0, 0); - -} diff --git a/dndBuilder/src/GUI/Panels/ChooseRacePanel.java b/dndBuilder/src/GUI/Panels/ChooseRacePanel.java index ca38609..dc8e745 100644 --- a/dndBuilder/src/GUI/Panels/ChooseRacePanel.java +++ b/dndBuilder/src/GUI/Panels/ChooseRacePanel.java @@ -1,38 +1,38 @@ package GUI.Panels; -import GUI.PanelTheme; +import GUI.AppTheme; import GUI.Panels.SubPanels.*; +import Resources.CustomAssets.*; import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import javax.swing.*; import javax.swing.border.*; -public class ChooseRacePanel extends JPanel implements PanelTheme { +public class ChooseRacePanel extends JPanel implements AppTheme { private String[] raceOptions; - private String[] raceDescriptions; - private InfoPanel infoPanel; - private int raceIndex; private JButton backButton; private JButton continueButton; - /** - * Create the panel. - */ - public ChooseRacePanel(JButton backButton, JButton continueButton) { + private DefaultButton[] raceOptionButtons; + + public ChooseRacePanel(JButton backButton, DefaultButton continueButton) { super(); this.backButton = backButton; this.continueButton = continueButton; + raceIndex = 0; createRaces(); this.infoPanel = new InfoPanel(raceOptions, raceDescriptions); panelSetup(); - add(createMasterPanel()); + createMasterPanel(); } @@ -48,41 +48,49 @@ public class ChooseRacePanel extends JPanel implements PanelTheme { } - private JPanel createMasterPanel() { + private void createMasterPanel() { - JLabel lblNewLabel = new JLabel("Step 1: Choose Race"); - lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); - lblNewLabel.setFont(new Font("Bodoni 72 Oldstyle", Font.PLAIN, 33)); - add(lblNewLabel, BorderLayout.NORTH); - - JPanel racePanel = new JPanel(); - racePanel.setOpaque(false); - racePanel.setLayout(null); - - racePanel.add(infoPanel); + JLabel title = new JLabel("Step 1: Choose Race"); + title.setHorizontalAlignment(SwingConstants.CENTER); + title.setFont(headerFont); + title.setForeground(darkestBrown); + add(title, BorderLayout.NORTH); + JPanel racePanel = new JPanel(); + racePanel.setOpaque(false); + racePanel.setLayout(null); + racePanel.add(infoPanel); racePanel.add(createRaceButtonPanel()); - add(createNavPanel(), BorderLayout.SOUTH); - - return racePanel; + add(racePanel); + add(createNavPanel(), BorderLayout.SOUTH); } private JPanel createRaceButtonPanel() { - JPanel raceBtnPanel = new JPanel(new GridLayout(raceOptions.length, 1, 15, 5)); - raceBtnPanel.setBackground(darkBrown); - raceBtnPanel.setBounds(311, 6, 109, 394); + JPanel buttonPanel = new JPanel(new GridLayout(raceOptions.length, 1, 0, 0)); + buttonPanel.setBackground(lightBrown); + + buttonPanel.setBounds(585, 45, 135, 355); + + raceOptionButtons = new DefaultButton[raceOptions.length]; + + + for (int i = 0; i < raceOptionButtons.length; i++) { + + raceOptionButtons[i] = createButton(raceOptions[i], i); + + } for (int i = 0; i < raceOptions.length; i++) { - raceBtnPanel.add(createButton(raceOptions[i], i)); + buttonPanel.add(raceOptionButtons[i]); } - return raceBtnPanel; + return buttonPanel; } @@ -95,9 +103,9 @@ public class ChooseRacePanel extends JPanel implements PanelTheme { private JPanel createNavPanel() { - JPanel panel = new JPanel(); - panel.setBackground(darkBrown); - + JPanel panel = new JPanel(new GridLayout(1, 2, 30, 0)); + panel.setBackground(darkestBrown); + panel.setBorder(new EmptyBorder(15, 150, 15, 150)); panel.add(backButton); panel.add(continueButton); @@ -105,30 +113,29 @@ public class ChooseRacePanel extends JPanel implements PanelTheme { } - private JButton createButton(String raceName, int index) { + private DefaultButton createButton(String raceName, int index) { - JButton button = new JButton(raceName); - button.addActionListener( - - e -> { - - raceIndex = index; - infoPanel.updateInfo(raceIndex); - - } - - ); + DefaultButton button = new DefaultButton(raceName); + button.addActionListener(e -> updateButtons(raceIndex, index)); return button; } + private void updateButtons(int lastIndex, int newIndex) { + + raceOptionButtons[lastIndex].deSelect(); + raceOptionButtons[newIndex].select(); + + raceIndex = newIndex; + infoPanel.updateInfo(raceIndex); + + } + public int getRaceChoice() { return raceIndex; } - - } diff --git a/dndBuilder/src/GUI/Panels/SubPanels/InfoPanel.java b/dndBuilder/src/GUI/Panels/SubPanels/InfoPanel.java index 8e0f5ff..41de474 100644 --- a/dndBuilder/src/GUI/Panels/SubPanels/InfoPanel.java +++ b/dndBuilder/src/GUI/Panels/SubPanels/InfoPanel.java @@ -1,17 +1,17 @@ package GUI.Panels.SubPanels; -import GUI.PanelTheme; +import GUI.AppTheme; import javax.imageio.ImageIO; import javax.swing.*; -import javax.swing.border.BevelBorder; +import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.util.Objects; import java.util.Random; -public class InfoPanel extends JPanel implements PanelTheme { +public class InfoPanel extends JPanel implements AppTheme { private JTextArea[] descriptions; private String[] holderDescriptions; @@ -48,7 +48,7 @@ public class InfoPanel extends JPanel implements PanelTheme { panelSetup(); - add(descriptions[holderIndex]); + add(descriptions[0]); add(portraits[holderIndex][getNextPortrait(holderIndex)]); repaint(); @@ -77,14 +77,16 @@ public class InfoPanel extends JPanel implements PanelTheme { private void panelSetup() { setOpaque(false); - setBounds(6, 6, 293, 394); + setBounds(5, 5, 600, 400); setLayout(null); - JLabel infoLbl = new JLabel("Information"); - infoLbl.setFont(new Font("Bodoni 72", Font.PLAIN, 20)); - infoLbl.setHorizontalAlignment(SwingConstants.CENTER); - infoLbl.setBounds(92, 6, 105, 16); - add(infoLbl); + JLabel subHeader = new JLabel("Description"); + subHeader.setFont(subHeaderFont); + subHeader.setHorizontalAlignment(SwingConstants.LEFT); + subHeader.setBounds(275, 10, 300, 35); + subHeader.setForeground(darkestBrown); + + add(subHeader); } @@ -101,8 +103,10 @@ public class InfoPanel extends JPanel implements PanelTheme { tmpDesc.setOpaque(false); tmpDesc.setEditable(false); tmpDesc.setFocusable(false); - tmpDesc.setFont(new Font("Bodoni 72", Font.PLAIN, 10)); - tmpDesc.setBounds(6, 21, 281, 196); + tmpDesc.setFont(paragraphFont); + tmpDesc.setBounds(275, 45, 300, 355); + tmpDesc.setBorder(new EmptyBorder(5, 5, 5, 5)); + tmpDesc.setForeground(darkestBrown); descriptions[i] = tmpDesc; @@ -118,32 +122,17 @@ public class InfoPanel extends JPanel implements PanelTheme { File imagesDir; - /* - - WINDOWS: - attempted - dndBuilder/src/GUI/img/category/ - dndBuilder/src/GUI/img/category - /dndBuilder/src/GUI/img/category - /dndBuilder/src/GUI/img/category/ - GUI/img/category/ - /GUI/img/category/ - src/GUI/img/category/ - /src/GUI/img/category/ - - */ - if(OS.startsWith("Windows")) { - imagesDir = new File("dndBuilder\\src\\GUI\\img\\" + categoryHolder[i] + "\\"); + imagesDir = new File("dndBuilder\\src\\Resources\\Img\\" + categoryHolder[i] + "\\"); } else if (OS.startsWith("Mac")) { - imagesDir = new File("dndBuilder/src/GUI/img/" + categoryHolder[i] + "/"); + imagesDir = new File("dndBuilder/src/Resources/Img/" + categoryHolder[i] + "/"); } else if (OS.startsWith("Linux")) { - imagesDir = new File("dndBuilder/src/GUI/img/" + categoryHolder[i] + "/"); + imagesDir = new File("dndBuilder/src/Resources/Img/" + categoryHolder[i] + "/"); } else { @@ -161,7 +150,7 @@ public class InfoPanel extends JPanel implements PanelTheme { portraits[i][index] = image(file); portraits[i][index].setOpaque(true); portraits[i][index].setBackground(lightBrown); - portraits[i][index].setBounds(6, 229, 281, 159); + portraits[i][index].setBounds(10, 45, 250, 355); index++; @@ -180,7 +169,7 @@ public class InfoPanel extends JPanel implements PanelTheme { try { img = ImageIO.read(file); - finalImg = img.getScaledInstance(281, 196, Image.SCALE_SMOOTH); + finalImg = img.getScaledInstance(250, 375, Image.SCALE_SMOOTH); } catch (Exception e) { diff --git a/dndBuilder/src/Resources/CustomAssets/DefaultButton.java b/dndBuilder/src/Resources/CustomAssets/DefaultButton.java new file mode 100644 index 0000000..b731edf --- /dev/null +++ b/dndBuilder/src/Resources/CustomAssets/DefaultButton.java @@ -0,0 +1,87 @@ +package Resources.CustomAssets; + +import GUI.AppTheme; + +import javax.swing.*; +import javax.swing.border.EmptyBorder; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +public class DefaultButton extends JButton implements AppTheme { + + private boolean selected; + + public DefaultButton(String buttonLabel) { + + super(buttonLabel); + applyDefaultButtonStyle(); + applyCommon(); + + } + + public void deSelect() { + + selected = false; + applyDefaultButtonStyle(); + + } + + public void select() { + + selected = true; + applyFocusedButtonStyle(); + + } + + private void applyDefaultButtonStyle() { + + setBackground(medBrown); + setForeground(darkestBrown); + + } + + private void applyFocusedButtonStyle() { + + setBackground(darkestBrown); + setForeground(lightAccent); + + } + + private void applyCommon() { + + addMouseListener( + new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) {} + @Override + public void mousePressed(MouseEvent e) {} + @Override + public void mouseReleased(MouseEvent e) {} + @Override + public void mouseEntered(MouseEvent e) { applyFocusedButtonStyle(); } + @Override + public void mouseExited(MouseEvent e) { + + if (!selected) { + + applyDefaultButtonStyle(); + + } + + } + } + + ); + + setFocusPainted(false); + setFont(buttonFont); + setBorder(new EmptyBorder(3, 3, 3, 3)); + + repaint(); + revalidate(); + + } + + + +} diff --git a/dndBuilder/src/Resources/CustomAssets/RoundedBorder.java b/dndBuilder/src/Resources/CustomAssets/RoundedBorder.java new file mode 100644 index 0000000..8062375 --- /dev/null +++ b/dndBuilder/src/Resources/CustomAssets/RoundedBorder.java @@ -0,0 +1,33 @@ +package Resources.CustomAssets; + +import javax.swing.border.*; +import java.awt.*; + +public class RoundedBorder implements Border { + + private int radius; + + public RoundedBorder(int radius) { + + this.radius = radius; + + } + + public Insets getBorderInsets(Component c) { + + return new Insets(this.radius+1, this.radius+1, this.radius+2, this.radius); + + } + + public boolean isBorderOpaque() { + + return true; + + } + + public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + + g.drawRoundRect(x, y, width-1, height-1, radius, radius); + + } +} diff --git a/dndBuilder/src/Resources/Fonts/SanSalvi.ttf b/dndBuilder/src/Resources/Fonts/SanSalvi.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e0311ea1d57702e265419308a7e0f2044d6a4a60 GIT binary patch literal 41296 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 DSjQd) literal 0 HcmV?d00001 diff --git a/dndBuilder/src/GUI/img/dragonborn/dragonborn.jpg b/dndBuilder/src/Resources/Img/dragonborn/dragonborn.jpg similarity index 100% rename from dndBuilder/src/GUI/img/dragonborn/dragonborn.jpg rename to dndBuilder/src/Resources/Img/dragonborn/dragonborn.jpg diff --git a/dndBuilder/src/GUI/img/dragonborn/dragonborn2.jpg b/dndBuilder/src/Resources/Img/dragonborn/dragonborn2.jpg similarity index 100% rename from dndBuilder/src/GUI/img/dragonborn/dragonborn2.jpg rename to dndBuilder/src/Resources/Img/dragonborn/dragonborn2.jpg diff --git a/dndBuilder/src/GUI/img/dragonborn/dragonborn3.jpg b/dndBuilder/src/Resources/Img/dragonborn/dragonborn3.jpg similarity index 100% rename from dndBuilder/src/GUI/img/dragonborn/dragonborn3.jpg rename to dndBuilder/src/Resources/Img/dragonborn/dragonborn3.jpg diff --git a/dndBuilder/src/GUI/img/dragonborn/dragonborn4.jpg b/dndBuilder/src/Resources/Img/dragonborn/dragonborn4.jpg similarity index 100% rename from dndBuilder/src/GUI/img/dragonborn/dragonborn4.jpg rename to dndBuilder/src/Resources/Img/dragonborn/dragonborn4.jpg diff --git a/dndBuilder/src/GUI/img/dragonborn/dragonborn5.jpg b/dndBuilder/src/Resources/Img/dragonborn/dragonborn5.jpg similarity index 100% rename from dndBuilder/src/GUI/img/dragonborn/dragonborn5.jpg rename to dndBuilder/src/Resources/Img/dragonborn/dragonborn5.jpg diff --git a/dndBuilder/src/GUI/img/dragonborn/dragonborn6.jpg b/dndBuilder/src/Resources/Img/dragonborn/dragonborn6.jpg similarity index 100% rename from dndBuilder/src/GUI/img/dragonborn/dragonborn6.jpg rename to dndBuilder/src/Resources/Img/dragonborn/dragonborn6.jpg diff --git a/dndBuilder/src/GUI/img/dwarf/dwarf.jpg b/dndBuilder/src/Resources/Img/dwarf/dwarf.jpg similarity index 100% rename from dndBuilder/src/GUI/img/dwarf/dwarf.jpg rename to dndBuilder/src/Resources/Img/dwarf/dwarf.jpg diff --git a/dndBuilder/src/GUI/img/elf/elf.jpg b/dndBuilder/src/Resources/Img/elf/elf.jpg similarity index 100% rename from dndBuilder/src/GUI/img/elf/elf.jpg rename to dndBuilder/src/Resources/Img/elf/elf.jpg diff --git a/dndBuilder/src/GUI/img/gnome/gnome.jpg b/dndBuilder/src/Resources/Img/gnome/gnome.jpg similarity index 100% rename from dndBuilder/src/GUI/img/gnome/gnome.jpg rename to dndBuilder/src/Resources/Img/gnome/gnome.jpg diff --git a/dndBuilder/src/GUI/img/halfelf/halfelf.jpg b/dndBuilder/src/Resources/Img/halfelf/halfelf.jpg similarity index 100% rename from dndBuilder/src/GUI/img/halfelf/halfelf.jpg rename to dndBuilder/src/Resources/Img/halfelf/halfelf.jpg diff --git a/dndBuilder/src/GUI/img/halfling/halfling.jpg b/dndBuilder/src/Resources/Img/halfling/halfling.jpg similarity index 100% rename from dndBuilder/src/GUI/img/halfling/halfling.jpg rename to dndBuilder/src/Resources/Img/halfling/halfling.jpg diff --git a/dndBuilder/src/GUI/img/halforc/halforc.jpg b/dndBuilder/src/Resources/Img/halforc/halforc.jpg similarity index 100% rename from dndBuilder/src/GUI/img/halforc/halforc.jpg rename to dndBuilder/src/Resources/Img/halforc/halforc.jpg diff --git a/dndBuilder/src/GUI/img/human/human.jpg b/dndBuilder/src/Resources/Img/human/human.jpg similarity index 100% rename from dndBuilder/src/GUI/img/human/human.jpg rename to dndBuilder/src/Resources/Img/human/human.jpg diff --git a/dndBuilder/src/GUI/img/sheet.jpg b/dndBuilder/src/Resources/Img/sheet.jpg similarity index 100% rename from dndBuilder/src/GUI/img/sheet.jpg rename to dndBuilder/src/Resources/Img/sheet.jpg diff --git a/dndBuilder/src/GUI/img/tiefling/tiefling.jpg b/dndBuilder/src/Resources/Img/tiefling/tiefling.jpg similarity index 100% rename from dndBuilder/src/GUI/img/tiefling/tiefling.jpg rename to dndBuilder/src/Resources/Img/tiefling/tiefling.jpg