commit 631edaf94f8c56683572b727b9bdbff951b91e04 Author: MrMelon Date: Sat May 7 15:42:48 2022 +0100 First commit diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..bd732a5 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..d8e9561 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..14a17be --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1a9bc23 --- /dev/null +++ b/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + xyz.mrmelon54 + swing-palette + 1.0.0 + jar + + 17 + ${java.version} + ${java.version} + UTF-8 + UTF-8 + ${maven.build.timestamp} + + + MrMelon + https://mrmelon54.xyz + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + package + + single + + + + + xyz.mrmelon54.swingpalette.Main + + + + jar-with-dependencies + + + + + + + + + src/main/resources + true + + + + + + com.formdev + flatlaf + 2.2 + + + com.google.code.gson + gson + 2.8.7 + + + diff --git a/src/main/java/xyz/mrmelon54/swingpalette/Main.java b/src/main/java/xyz/mrmelon54/swingpalette/Main.java new file mode 100644 index 0000000..b6e1779 --- /dev/null +++ b/src/main/java/xyz/mrmelon54/swingpalette/Main.java @@ -0,0 +1,8 @@ +package xyz.mrmelon54.swingpalette; + +public class Main { + public static void main(String[] args) { + SwingPalette swingPalette = new SwingPalette(); + swingPalette.run(); + } +} diff --git a/src/main/java/xyz/mrmelon54/swingpalette/PaletteItem.java b/src/main/java/xyz/mrmelon54/swingpalette/PaletteItem.java new file mode 100644 index 0000000..e1f5610 --- /dev/null +++ b/src/main/java/xyz/mrmelon54/swingpalette/PaletteItem.java @@ -0,0 +1,16 @@ +package xyz.mrmelon54.swingpalette; + +import javax.swing.*; +import javax.swing.border.EmptyBorder; + +public class PaletteItem extends JLabel { + public PaletteItem(String text) { + super(text); + setBorder(new EmptyBorder(16, 16, 16, 16)); + } + + public void setup() { + setOpaque(true); + setBackground(UIManager.getDefaults().getColor(getText())); + } +} diff --git a/src/main/java/xyz/mrmelon54/swingpalette/SwingPalette.java b/src/main/java/xyz/mrmelon54/swingpalette/SwingPalette.java new file mode 100644 index 0000000..3ce6a46 --- /dev/null +++ b/src/main/java/xyz/mrmelon54/swingpalette/SwingPalette.java @@ -0,0 +1,75 @@ +package xyz.mrmelon54.swingpalette; + +import com.google.gson.Gson; + +import javax.swing.*; +import java.awt.*; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Objects; + +public class SwingPalette extends JFrame { + private JPanel mainContent; + + public SwingPalette() { + super("Swing Palette"); + setup(); + changeTheme(Theme.Metal); + } + + public void changeTheme(Theme theme) { + theme.triggerSetup(); + SwingUtilities.updateComponentTreeUI(this); + for (int i = 0; i < mainContent.getComponentCount(); i++) + if (mainContent.getComponent(i) instanceof PaletteItem paletteItem) paletteItem.setup(); + } + + public void setup() { + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setPreferredSize(new Dimension(1000, 600)); + setMinimumSize(new Dimension(1000, 600)); + setContentPane(createMainPanel()); + } + + private JPanel createMainPanel() { + JComboBox themeComboBox = new JComboBox<>(); + themeComboBox.setMaximumSize(new Dimension(100, themeComboBox.getPreferredSize().height)); + for (Theme value : Theme.values()) themeComboBox.addItem(value); + themeComboBox.setSelectedItem(Theme.Metal); + themeComboBox.addItemListener(e -> changeTheme((Theme) Objects.requireNonNull(themeComboBox.getSelectedItem()))); + + JPanel optionPane = new JPanel(); + optionPane.add(themeComboBox); + + mainContent = new JPanel(); + mainContent.setLayout(new WrapLayout()); + fillMainPanel(mainContent); + + JScrollPane scrollPane = new JScrollPane(mainContent, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + scrollPane.setBorder(null); + scrollPane.getVerticalScrollBar().setUnitIncrement(16); + + JPanel mainPanel = new JPanel(); + mainPanel.setLayout(new BorderLayout()); + mainPanel.add(scrollPane, BorderLayout.CENTER); + mainPanel.add(optionPane, BorderLayout.NORTH); + return mainPanel; + } + + private void fillMainPanel(JPanel mainPanel) { + try (InputStream resourceAsStream = getClass().getResourceAsStream("/palette-names.json")) { + if (resourceAsStream != null) { + for (String item : new Gson().fromJson(new InputStreamReader(resourceAsStream), String[].class)) { + mainPanel.add(new PaletteItem(item)); + } + } else mainPanel.add(new JLabel("No palette keys available")); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public void run() { + setVisible(true); + } +} diff --git a/src/main/java/xyz/mrmelon54/swingpalette/Theme.java b/src/main/java/xyz/mrmelon54/swingpalette/Theme.java new file mode 100644 index 0000000..b48d528 --- /dev/null +++ b/src/main/java/xyz/mrmelon54/swingpalette/Theme.java @@ -0,0 +1,50 @@ +package xyz.mrmelon54.swingpalette; + +import com.formdev.flatlaf.FlatDarkLaf; +import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.FlatLightLaf; + +import javax.swing.*; +import javax.swing.plaf.metal.DefaultMetalTheme; +import javax.swing.plaf.metal.MetalLookAndFeel; +import javax.swing.plaf.metal.OceanTheme; +import javax.swing.plaf.nimbus.NimbusLookAndFeel; + +public enum Theme { + System(() -> setLookAndFeelIgnored(UIManager.getSystemLookAndFeelClassName())), + Light(FlatLightLaf::setup), + Dark(FlatDarkLaf::setup), + Metal(() -> { + MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme()); + FlatLaf.setup(new MetalLookAndFeel()); + }), + Ocean(() -> { + MetalLookAndFeel.setCurrentTheme(new OceanTheme()); + FlatLaf.setup(new MetalLookAndFeel()); + }), + Nimbus(() -> FlatLaf.setup(new NimbusLookAndFeel())); + + private static void setLookAndFeelIgnored(String name) { + try { + UIManager.setLookAndFeel(name); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | + UnsupportedLookAndFeelException e) { + throw new RuntimeException(e); + } + } + + private final SetupTheme setupTheme; + + Theme(SetupTheme setupTheme) { + this.setupTheme = setupTheme; + + } + + public void triggerSetup() { + setupTheme.setup(); + } + + private interface SetupTheme { + void setup(); + } +} diff --git a/src/main/java/xyz/mrmelon54/swingpalette/WrapLayout.java b/src/main/java/xyz/mrmelon54/swingpalette/WrapLayout.java new file mode 100644 index 0000000..1078557 --- /dev/null +++ b/src/main/java/xyz/mrmelon54/swingpalette/WrapLayout.java @@ -0,0 +1,180 @@ +package xyz.mrmelon54.swingpalette; + +import java.awt.*; +import javax.swing.JScrollPane; +import javax.swing.SwingUtilities; + +/** + * FlowLayout subclass that fully supports wrapping of components. + */ +public class WrapLayout extends FlowLayout { + private Dimension preferredLayoutSize; + + /** + * Constructs a new WrapLayout with a left + * alignment and a default 5-unit horizontal and vertical gap. + */ + public WrapLayout() { + super(); + } + + /** + * Constructs a new FlowLayout with the specified + * alignment and a default 5-unit horizontal and vertical gap. + * The value of the alignment argument must be one of + * WrapLayout, WrapLayout, + * or WrapLayout. + * + * @param align the alignment value + */ + public WrapLayout(int align) { + super(align); + } + + /** + * Creates a new flow layout manager with the indicated alignment + * and the indicated horizontal and vertical gaps. + *

+ * The value of the alignment argument must be one of + * WrapLayout, WrapLayout, + * or WrapLayout. + * + * @param align the alignment value + * @param hgap the horizontal gap between components + * @param vgap the vertical gap between components + */ + public WrapLayout(int align, int hgap, int vgap) { + super(align, hgap, vgap); + } + + /** + * Returns the preferred dimensions for this layout given the + * visible components in the specified target container. + * + * @param target the component which needs to be laid out + * @return the preferred dimensions to lay out the + * subcomponents of the specified container + */ + @Override + public Dimension preferredLayoutSize(Container target) { + return layoutSize(target, true); + } + + /** + * Returns the minimum dimensions needed to layout the visible + * components contained in the specified target container. + * + * @param target the component which needs to be laid out + * @return the minimum dimensions to lay out the + * subcomponents of the specified container + */ + @Override + public Dimension minimumLayoutSize(Container target) { + Dimension minimum = layoutSize(target, false); + minimum.width -= (getHgap() + 1); + return minimum; + } + + /** + * Returns the minimum or preferred dimension needed to layout the target + * container. + * + * @param target target to get layout size for + * @param preferred should preferred size be calculated + * @return the dimension to layout the target container + */ + private Dimension layoutSize(Container target, boolean preferred) { + synchronized (target.getTreeLock()) { + // Each row must fit with the width allocated to the containter. + // When the container width = 0, the preferred width of the container + // has not yet been calculated so lets ask for the maximum. + + int targetWidth = target.getSize().width; + Container container = target; + + while (container.getSize().width == 0 && container.getParent() != null) { + container = container.getParent(); + } + + targetWidth = container.getSize().width; + + if (targetWidth == 0) + targetWidth = Integer.MAX_VALUE; + + int hgap = getHgap(); + int vgap = getVgap(); + Insets insets = target.getInsets(); + int horizontalInsetsAndGap = insets.left + insets.right + (hgap * 2); + int maxWidth = targetWidth - horizontalInsetsAndGap; + + // Fit components into the allowed width + + Dimension dim = new Dimension(0, 0); + int rowWidth = 0; + int rowHeight = 0; + + int nmembers = target.getComponentCount(); + + for (int i = 0; i < nmembers; i++) { + Component m = target.getComponent(i); + + if (m.isVisible()) { + Dimension d = preferred ? m.getPreferredSize() : m.getMinimumSize(); + + // Can't add the component to current row. Start a new row. + + if (rowWidth + d.width > maxWidth) { + addRow(dim, rowWidth, rowHeight); + rowWidth = 0; + rowHeight = 0; + } + + // Add a horizontal gap for all components after the first + + if (rowWidth != 0) { + rowWidth += hgap; + } + + rowWidth += d.width; + rowHeight = Math.max(rowHeight, d.height); + } + } + + addRow(dim, rowWidth, rowHeight); + + dim.width += horizontalInsetsAndGap; + dim.height += insets.top + insets.bottom + vgap * 2; + + // When using a scroll pane or the DecoratedLookAndFeel we need to + // make sure the preferred size is less than the size of the + // target containter so shrinking the container size works + // correctly. Removing the horizontal gap is an easy way to do this. + + Container scrollPane = SwingUtilities.getAncestorOfClass(JScrollPane.class, target); + + if (scrollPane != null && target.isValid()) { + dim.width -= (hgap + 1); + } + + return dim; + } + } + + /* + * A new row has been completed. Use the dimensions of this row + * to update the preferred size for the container. + * + * @param dim update the width and height when appropriate + * @param rowWidth the width of the row to add + * @param rowHeight the height of the row to add + */ + private void addRow(Dimension dim, int rowWidth, int rowHeight) { + dim.width = Math.max(dim.width, rowWidth); + + if (dim.height > 0) { + dim.height += getVgap(); + } + + dim.height += rowHeight; + } +} \ No newline at end of file diff --git a/src/main/resources/palette-names.json b/src/main/resources/palette-names.json new file mode 100644 index 0000000..cc39629 --- /dev/null +++ b/src/main/resources/palette-names.json @@ -0,0 +1,256 @@ +[ + "Button.background", + "Button.darkShadow", + "Button.disabledText", + "Button.foreground", + "Button.highlight", + "Button.light", + "Button.select", + "Button.shadow", + "CheckBox.background", + "CheckBox.disabledText", + "CheckBox.foreground", + "CheckBox.select", + "CheckBoxMenuItem.acceleratorForeground", + "CheckBoxMenuItem.acceleratorSelectionForeground", + "CheckBoxMenuItem.background", + "CheckBoxMenuItem.disabledBackground", + "CheckBoxMenuItem.disabledForeground", + "CheckBoxMenuItem.foreground", + "CheckBoxMenuItem.selectionBackground", + "CheckBoxMenuItem.selectionForeground", + "ColorChooser.background", + "ColorChooser.foreground", + "ColorChooser.swatchesDefaultRecentColor", + "ComboBox.background", + "ComboBox.buttonBackground", + "ComboBox.buttonDarkShadow", + "ComboBox.buttonHighlight", + "ComboBox.buttonShadow", + "ComboBox.disabledBackground", + "ComboBox.disabledForeground", + "ComboBox.foreground", + "ComboBox.selectionBackground", + "ComboBox.selectionForeground", + "Desktop.background", + "EditorPane.background", + "EditorPane.caretForeground", + "EditorPane.foreground", + "EditorPane.inactiveBackground", + "EditorPane.inactiveForeground", + "EditorPane.selectionBackground", + "EditorPane.selectionForeground", + "Focus.color", + "FormattedTextField.background", + "FormattedTextField.caretForeground", + "FormattedTextField.foreground", + "FormattedTextField.inactiveBackground", + "FormattedTextField.inactiveForeground", + "FormattedTextField.selectionBackground", + "FormattedTextField.selectionForeground", + "InternalFrame.activeTitleBackground", + "InternalFrame.activeTitleForeground", + "InternalFrame.background", + "InternalFrame.borderColor", + "InternalFrame.borderDarkShadow", + "InternalFrame.borderHighlight", + "InternalFrame.borderLight", + "InternalFrame.borderShadow", + "InternalFrame.inactiveTitleBackground", + "InternalFrame.inactiveTitleForeground", + "InternalFrame.optionDialogBackground", + "InternalFrame.paletteBackground", + "Label.background", + "Label.disabledForeground", + "Label.disabledShadow", + "Label.foreground", + "List.background", + "List.foreground", + "List.selectionBackground", + "List.selectionForeground", + "Menu.acceleratorForeground", + "Menu.acceleratorSelectionForeground", + "Menu.background", + "Menu.disabledBackground", + "Menu.disabledForeground", + "Menu.foreground", + "Menu.selectionBackground", + "Menu.selectionForeground", + "MenuBar.background", + "MenuBar.disabledBackground", + "MenuBar.disabledForeground", + "MenuBar.foreground", + "MenuBar.highlight", + "MenuBar.selectionBackground", + "MenuBar.selectionForeground", + "MenuBar.shadow", + "MenuItem.acceleratorForeground", + "MenuItem.acceleratorSelectionForeground", + "MenuItem.background", + "MenuItem.disabledBackground", + "MenuItem.disabledForeground", + "MenuItem.foreground", + "MenuItem.selectionBackground", + "MenuItem.selectionForeground", + "OptionPane.background", + "OptionPane.foreground", + "OptionPane.messageForeground", + "Panel.background", + "Panel.foreground", + "PasswordField.background", + "PasswordField.caretForeground", + "PasswordField.foreground", + "PasswordField.inactiveBackground", + "PasswordField.inactiveForeground", + "PasswordField.selectionBackground", + "PasswordField.selectionForeground", + "PopupMenu.background", + "PopupMenu.foreground", + "PopupMenu.selectionBackground", + "PopupMenu.selectionForeground", + "ProgressBar.background", + "ProgressBar.foreground", + "ProgressBar.selectionBackground", + "ProgressBar.selectionForeground", + "RadioButton.background", + "RadioButton.darkShadow", + "RadioButton.disabledText", + "RadioButton.foreground", + "RadioButton.highlight", + "RadioButton.light", + "RadioButton.select", + "RadioButton.shadow", + "RadioButtonMenuItem.acceleratorForeground", + "RadioButtonMenuItem.acceleratorSelectionForeground", + "RadioButtonMenuItem.background", + "RadioButtonMenuItem.disabledBackground", + "RadioButtonMenuItem.disabledForeground", + "RadioButtonMenuItem.foreground", + "RadioButtonMenuItem.selectionBackground", + "RadioButtonMenuItem.selectionForeground", + "ScrollBar.background", + "ScrollBar.foreground", + "ScrollBar.thumb", + "ScrollBar.thumbDarkShadow", + "ScrollBar.thumbHighlight", + "ScrollBar.thumbShadow", + "ScrollBar.track", + "ScrollBar.trackHighlight", + "ScrollPane.background", + "ScrollPane.foreground", + "Separator.foreground", + "Separator.highlight", + "Separator.shadow", + "Slider.background", + "Slider.focus", + "Slider.foreground", + "Slider.highlight", + "Slider.shadow", + "Slider.tickColor", + "Spinner.background", + "Spinner.foreground", + "SplitPane.background", + "SplitPane.darkShadow", + "SplitPane.highlight", + "SplitPane.shadow", + "SplitPaneDivider.draggingColor", + "TabbedPane.background", + "TabbedPane.darkShadow", + "TabbedPane.focus", + "TabbedPane.foreground", + "TabbedPane.highlight", + "TabbedPane.light", + "TabbedPane.shadow", + "Table.background", + "Table.focusCellBackground", + "Table.focusCellForeground", + "Table.foreground", + "Table.gridColor", + "Table.selectionBackground", + "Table.selectionForeground", + "TableHeader.background", + "TableHeader.foreground", + "TextArea.background", + "TextArea.caretForeground", + "TextArea.foreground", + "TextArea.inactiveBackground", + "TextArea.inactiveForeground", + "TextArea.selectionBackground", + "TextArea.selectionForeground", + "TextComponent.selectionBackgroundInactive", + "TextField.background", + "TextField.caretForeground", + "TextField.darkShadow", + "TextField.foreground", + "TextField.highlight", + "TextField.inactiveBackground", + "TextField.inactiveForeground", + "TextField.light", + "TextField.selectionBackground", + "TextField.selectionForeground", + "TextField.shadow", + "TextPane.background", + "TextPane.caretForeground", + "TextPane.foreground", + "TextPane.inactiveBackground", + "TextPane.inactiveForeground", + "TextPane.selectionBackground", + "TextPane.selectionForeground", + "TitledBorder.titleColor", + "ToggleButton.background", + "ToggleButton.darkShadow", + "ToggleButton.disabledText", + "ToggleButton.foreground", + "ToggleButton.highlight", + "ToggleButton.light", + "ToggleButton.shadow", + "ToolBar.background", + "ToolBar.darkShadow", + "ToolBar.dockingBackground", + "ToolBar.dockingForeground", + "ToolBar.floatingBackground", + "ToolBar.floatingForeground", + "ToolBar.foreground", + "ToolBar.highlight", + "ToolBar.light", + "ToolBar.shadow", + "ToolTip.background", + "ToolTip.foreground", + "Tree.background", + "Tree.foreground", + "Tree.hash", + "Tree.line", + "Tree.selectionBackground", + "Tree.selectionBorderColor", + "Tree.selectionForeground", + "Tree.textBackground", + "Tree.textForeground", + "Viewport.background", + "Viewport.foreground", + "activeCaption", + "activeCaptionBorder", + "activeCaptionText", + "control", + "controlDkShadow", + "controlHighlight", + "controlLtHighlight", + "controlShadow", + "controlText", + "desktop", + "inactiveCaption", + "inactiveCaptionBorder", + "inactiveCaptionText", + "info", + "infoText", + "menu", + "menuText", + "scrollbar", + "text", + "textHighlight", + "textHighlightText", + "textInactiveText", + "textText", + "window", + "windowBorder", + "windowText" +] \ No newline at end of file diff --git a/target/classes/palette-names.json b/target/classes/palette-names.json new file mode 100644 index 0000000..cc39629 --- /dev/null +++ b/target/classes/palette-names.json @@ -0,0 +1,256 @@ +[ + "Button.background", + "Button.darkShadow", + "Button.disabledText", + "Button.foreground", + "Button.highlight", + "Button.light", + "Button.select", + "Button.shadow", + "CheckBox.background", + "CheckBox.disabledText", + "CheckBox.foreground", + "CheckBox.select", + "CheckBoxMenuItem.acceleratorForeground", + "CheckBoxMenuItem.acceleratorSelectionForeground", + "CheckBoxMenuItem.background", + "CheckBoxMenuItem.disabledBackground", + "CheckBoxMenuItem.disabledForeground", + "CheckBoxMenuItem.foreground", + "CheckBoxMenuItem.selectionBackground", + "CheckBoxMenuItem.selectionForeground", + "ColorChooser.background", + "ColorChooser.foreground", + "ColorChooser.swatchesDefaultRecentColor", + "ComboBox.background", + "ComboBox.buttonBackground", + "ComboBox.buttonDarkShadow", + "ComboBox.buttonHighlight", + "ComboBox.buttonShadow", + "ComboBox.disabledBackground", + "ComboBox.disabledForeground", + "ComboBox.foreground", + "ComboBox.selectionBackground", + "ComboBox.selectionForeground", + "Desktop.background", + "EditorPane.background", + "EditorPane.caretForeground", + "EditorPane.foreground", + "EditorPane.inactiveBackground", + "EditorPane.inactiveForeground", + "EditorPane.selectionBackground", + "EditorPane.selectionForeground", + "Focus.color", + "FormattedTextField.background", + "FormattedTextField.caretForeground", + "FormattedTextField.foreground", + "FormattedTextField.inactiveBackground", + "FormattedTextField.inactiveForeground", + "FormattedTextField.selectionBackground", + "FormattedTextField.selectionForeground", + "InternalFrame.activeTitleBackground", + "InternalFrame.activeTitleForeground", + "InternalFrame.background", + "InternalFrame.borderColor", + "InternalFrame.borderDarkShadow", + "InternalFrame.borderHighlight", + "InternalFrame.borderLight", + "InternalFrame.borderShadow", + "InternalFrame.inactiveTitleBackground", + "InternalFrame.inactiveTitleForeground", + "InternalFrame.optionDialogBackground", + "InternalFrame.paletteBackground", + "Label.background", + "Label.disabledForeground", + "Label.disabledShadow", + "Label.foreground", + "List.background", + "List.foreground", + "List.selectionBackground", + "List.selectionForeground", + "Menu.acceleratorForeground", + "Menu.acceleratorSelectionForeground", + "Menu.background", + "Menu.disabledBackground", + "Menu.disabledForeground", + "Menu.foreground", + "Menu.selectionBackground", + "Menu.selectionForeground", + "MenuBar.background", + "MenuBar.disabledBackground", + "MenuBar.disabledForeground", + "MenuBar.foreground", + "MenuBar.highlight", + "MenuBar.selectionBackground", + "MenuBar.selectionForeground", + "MenuBar.shadow", + "MenuItem.acceleratorForeground", + "MenuItem.acceleratorSelectionForeground", + "MenuItem.background", + "MenuItem.disabledBackground", + "MenuItem.disabledForeground", + "MenuItem.foreground", + "MenuItem.selectionBackground", + "MenuItem.selectionForeground", + "OptionPane.background", + "OptionPane.foreground", + "OptionPane.messageForeground", + "Panel.background", + "Panel.foreground", + "PasswordField.background", + "PasswordField.caretForeground", + "PasswordField.foreground", + "PasswordField.inactiveBackground", + "PasswordField.inactiveForeground", + "PasswordField.selectionBackground", + "PasswordField.selectionForeground", + "PopupMenu.background", + "PopupMenu.foreground", + "PopupMenu.selectionBackground", + "PopupMenu.selectionForeground", + "ProgressBar.background", + "ProgressBar.foreground", + "ProgressBar.selectionBackground", + "ProgressBar.selectionForeground", + "RadioButton.background", + "RadioButton.darkShadow", + "RadioButton.disabledText", + "RadioButton.foreground", + "RadioButton.highlight", + "RadioButton.light", + "RadioButton.select", + "RadioButton.shadow", + "RadioButtonMenuItem.acceleratorForeground", + "RadioButtonMenuItem.acceleratorSelectionForeground", + "RadioButtonMenuItem.background", + "RadioButtonMenuItem.disabledBackground", + "RadioButtonMenuItem.disabledForeground", + "RadioButtonMenuItem.foreground", + "RadioButtonMenuItem.selectionBackground", + "RadioButtonMenuItem.selectionForeground", + "ScrollBar.background", + "ScrollBar.foreground", + "ScrollBar.thumb", + "ScrollBar.thumbDarkShadow", + "ScrollBar.thumbHighlight", + "ScrollBar.thumbShadow", + "ScrollBar.track", + "ScrollBar.trackHighlight", + "ScrollPane.background", + "ScrollPane.foreground", + "Separator.foreground", + "Separator.highlight", + "Separator.shadow", + "Slider.background", + "Slider.focus", + "Slider.foreground", + "Slider.highlight", + "Slider.shadow", + "Slider.tickColor", + "Spinner.background", + "Spinner.foreground", + "SplitPane.background", + "SplitPane.darkShadow", + "SplitPane.highlight", + "SplitPane.shadow", + "SplitPaneDivider.draggingColor", + "TabbedPane.background", + "TabbedPane.darkShadow", + "TabbedPane.focus", + "TabbedPane.foreground", + "TabbedPane.highlight", + "TabbedPane.light", + "TabbedPane.shadow", + "Table.background", + "Table.focusCellBackground", + "Table.focusCellForeground", + "Table.foreground", + "Table.gridColor", + "Table.selectionBackground", + "Table.selectionForeground", + "TableHeader.background", + "TableHeader.foreground", + "TextArea.background", + "TextArea.caretForeground", + "TextArea.foreground", + "TextArea.inactiveBackground", + "TextArea.inactiveForeground", + "TextArea.selectionBackground", + "TextArea.selectionForeground", + "TextComponent.selectionBackgroundInactive", + "TextField.background", + "TextField.caretForeground", + "TextField.darkShadow", + "TextField.foreground", + "TextField.highlight", + "TextField.inactiveBackground", + "TextField.inactiveForeground", + "TextField.light", + "TextField.selectionBackground", + "TextField.selectionForeground", + "TextField.shadow", + "TextPane.background", + "TextPane.caretForeground", + "TextPane.foreground", + "TextPane.inactiveBackground", + "TextPane.inactiveForeground", + "TextPane.selectionBackground", + "TextPane.selectionForeground", + "TitledBorder.titleColor", + "ToggleButton.background", + "ToggleButton.darkShadow", + "ToggleButton.disabledText", + "ToggleButton.foreground", + "ToggleButton.highlight", + "ToggleButton.light", + "ToggleButton.shadow", + "ToolBar.background", + "ToolBar.darkShadow", + "ToolBar.dockingBackground", + "ToolBar.dockingForeground", + "ToolBar.floatingBackground", + "ToolBar.floatingForeground", + "ToolBar.foreground", + "ToolBar.highlight", + "ToolBar.light", + "ToolBar.shadow", + "ToolTip.background", + "ToolTip.foreground", + "Tree.background", + "Tree.foreground", + "Tree.hash", + "Tree.line", + "Tree.selectionBackground", + "Tree.selectionBorderColor", + "Tree.selectionForeground", + "Tree.textBackground", + "Tree.textForeground", + "Viewport.background", + "Viewport.foreground", + "activeCaption", + "activeCaptionBorder", + "activeCaptionText", + "control", + "controlDkShadow", + "controlHighlight", + "controlLtHighlight", + "controlShadow", + "controlText", + "desktop", + "inactiveCaption", + "inactiveCaptionBorder", + "inactiveCaptionText", + "info", + "infoText", + "menu", + "menuText", + "scrollbar", + "text", + "textHighlight", + "textHighlightText", + "textInactiveText", + "textText", + "window", + "windowBorder", + "windowText" +] \ No newline at end of file diff --git a/target/classes/xyz/mrmelon54/swingpalette/Main.class b/target/classes/xyz/mrmelon54/swingpalette/Main.class new file mode 100644 index 0000000..c01b4f6 Binary files /dev/null and b/target/classes/xyz/mrmelon54/swingpalette/Main.class differ diff --git a/target/classes/xyz/mrmelon54/swingpalette/PaletteItem.class b/target/classes/xyz/mrmelon54/swingpalette/PaletteItem.class new file mode 100644 index 0000000..5957412 Binary files /dev/null and b/target/classes/xyz/mrmelon54/swingpalette/PaletteItem.class differ diff --git a/target/classes/xyz/mrmelon54/swingpalette/SwingPalette.class b/target/classes/xyz/mrmelon54/swingpalette/SwingPalette.class new file mode 100644 index 0000000..0d67bf4 Binary files /dev/null and b/target/classes/xyz/mrmelon54/swingpalette/SwingPalette.class differ diff --git a/target/classes/xyz/mrmelon54/swingpalette/Theme$SetupTheme.class b/target/classes/xyz/mrmelon54/swingpalette/Theme$SetupTheme.class new file mode 100644 index 0000000..4234367 Binary files /dev/null and b/target/classes/xyz/mrmelon54/swingpalette/Theme$SetupTheme.class differ diff --git a/target/classes/xyz/mrmelon54/swingpalette/Theme.class b/target/classes/xyz/mrmelon54/swingpalette/Theme.class new file mode 100644 index 0000000..8aafb69 Binary files /dev/null and b/target/classes/xyz/mrmelon54/swingpalette/Theme.class differ diff --git a/target/classes/xyz/mrmelon54/swingpalette/WrapLayout.class b/target/classes/xyz/mrmelon54/swingpalette/WrapLayout.class new file mode 100644 index 0000000..7ffcd9b Binary files /dev/null and b/target/classes/xyz/mrmelon54/swingpalette/WrapLayout.class differ