From d0e65fe1bcc3509e75db7d8c5652a3f43ee0bb9a Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 27 Oct 2013 05:54:22 +0000 Subject: [PATCH] Use FComboBox in place of JComboBox --- .../home/settings/CSubmenuPreferences.java | 14 ++++++------- .../java/forge/gui/toolbox/FComboBox.java | 20 +++++++++++++++---- .../forge/gui/toolbox/FComboBoxPanel.java | 9 ++++----- .../forge/gui/toolbox/FComboBoxWrapper.java | 19 +++++++++--------- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java index 07a31b6316d..1853889133b 100644 --- a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java +++ b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.List; import javax.swing.JCheckBox; -import javax.swing.JComboBox; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; @@ -22,6 +21,7 @@ import forge.control.RestartUtil; import forge.game.ai.AiProfileUtil; import forge.gui.framework.FScreen; import forge.gui.framework.ICDoc; +import forge.gui.toolbox.FComboBox; import forge.gui.toolbox.FComboBoxPanel; import forge.gui.toolbox.FLabel; import forge.properties.ForgePreferences; @@ -195,14 +195,14 @@ public enum CSubmenuPreferences implements ICDoc { private void initializeGameLogVerbosityComboBox() { FPref userSetting = FPref.DEV_LOG_ENTRY_TYPE; FComboBoxPanel panel = this.view.getGameLogVerbosityComboBoxPanel(); - JComboBox comboBox = createComboBox(GameLogEntryType.values(), userSetting); + FComboBox comboBox = createComboBox(GameLogEntryType.values(), userSetting); GameLogEntryType selectedItem = GameLogEntryType.valueOf(this.prefs.getPref(userSetting)); panel.setComboBox(comboBox, selectedItem); } private void initializeCloseActionComboBox() { final FComboBoxPanel panel = this.view.getCloseActionComboBoxPanel(); - final JComboBox comboBox = new JComboBox(CloseAction.values()); + final FComboBox comboBox = new FComboBox(CloseAction.values()); comboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(final ItemEvent e) { @@ -215,18 +215,18 @@ public enum CSubmenuPreferences implements ICDoc { private void initializeAiProfilesComboBox() { FPref userSetting = FPref.UI_CURRENT_AI_PROFILE; FComboBoxPanel panel = this.view.getAiProfilesComboBoxPanel(); - JComboBox comboBox = createComboBox(AiProfileUtil.getProfilesArray(), userSetting); + FComboBox comboBox = createComboBox(AiProfileUtil.getProfilesArray(), userSetting); String selectedItem = this.prefs.getPref(userSetting); panel.setComboBox(comboBox, selectedItem); } - private JComboBox createComboBox(E[] items, final ForgePreferences.FPref setting) { - final JComboBox comboBox = new JComboBox(items); + private FComboBox createComboBox(E[] items, final ForgePreferences.FPref setting) { + final FComboBox comboBox = new FComboBox(items); addComboBoxListener(comboBox, setting); return comboBox; } - private void addComboBoxListener(final JComboBox comboBox, final ForgePreferences.FPref setting) { + private void addComboBoxListener(final FComboBox comboBox, final ForgePreferences.FPref setting) { comboBox.addItemListener(new ItemListener() { @SuppressWarnings("unchecked") @Override diff --git a/src/main/java/forge/gui/toolbox/FComboBox.java b/src/main/java/forge/gui/toolbox/FComboBox.java index de097224e6f..3f7e8648911 100644 --- a/src/main/java/forge/gui/toolbox/FComboBox.java +++ b/src/main/java/forge/gui/toolbox/FComboBox.java @@ -4,6 +4,8 @@ import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.LayoutManager; +import java.util.Vector; + import javax.swing.ComboBoxModel; import javax.swing.DefaultListCellRenderer; import javax.swing.JButton; @@ -45,6 +47,10 @@ public class FComboBox extends JComboBox { super(items); initialize(); } + public FComboBox(Vector items) { + super(items); + initialize(); + } private void initialize() { setUI(new FComboBoxUI()); @@ -64,10 +70,16 @@ public class FComboBox extends JComboBox { super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; g2d.setPaint(getForeground()); - int shapeWidth = 10; - int shapeHeight = 10; - int x = getWidth() - shapeWidth - 8; - int y = getHeight() / 2 - 2; + int shapeWidth = 8; + int shapeHeight = 8; + int x = getWidth() - shapeWidth - 6; + int y = getHeight() / 2 - 1; + if (getHeight() > 26) { //increase arrow size if taller combo box + shapeWidth += 2; + shapeHeight += 2; + x -= 4; + y--; + } int[] xPoints = {x, x + shapeWidth, x + (shapeWidth / 2)}; int[] yPoints = {y, y, y + (shapeHeight / 2)}; g2d.fillPolygon(xPoints, yPoints, 3); diff --git a/src/main/java/forge/gui/toolbox/FComboBoxPanel.java b/src/main/java/forge/gui/toolbox/FComboBoxPanel.java index 05fb66b56f3..2928abcbb68 100644 --- a/src/main/java/forge/gui/toolbox/FComboBoxPanel.java +++ b/src/main/java/forge/gui/toolbox/FComboBoxPanel.java @@ -5,7 +5,6 @@ import java.awt.FlowLayout; import java.util.ArrayList; import javax.swing.DefaultListCellRenderer; -import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; @@ -17,7 +16,7 @@ import forge.gui.toolbox.FSkin.JLabelSkin; import forge.properties.ForgePreferences.FPref; /** - * Panel with combo box and caption (either FComboBoxWrapper or FComboBoxPanel should be used instead of JComboBox so skinning works) + * Panel with combo box and caption (either FComboBoxWrapper or FComboBoxPanel should be used instead of FComboBox so skinning works) * */ @SuppressWarnings("serial") @@ -32,7 +31,7 @@ public class FComboBoxPanel extends JPanel { } private String comboBoxCaption = ""; - private JComboBox comboBox = null; + private FComboBox comboBox = null; public FComboBoxPanel(String comboBoxCaption) { super(); @@ -41,7 +40,7 @@ public class FComboBoxPanel extends JPanel { allPanels.add(this); } - public void setComboBox(JComboBox comboBox, E selectedItem) { + public void setComboBox(FComboBox comboBox, E selectedItem) { removeExistingComboBox(); this.comboBox = comboBox; this.comboBox.setSelectedItem(selectedItem); @@ -81,7 +80,7 @@ public class FComboBoxPanel extends JPanel { private void setComboBoxLayout() { if (this.comboBox != null) { if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_THEMED_COMBOBOX)) { - FSkin.JComponentSkin> comboBoxSkin = FSkin.get(this.comboBox); + FSkin.JComponentSkin> comboBoxSkin = FSkin.get(this.comboBox); comboBoxSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); comboBoxSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); comboBoxSkin.setFont(FSkin.getFont(12)); diff --git a/src/main/java/forge/gui/toolbox/FComboBoxWrapper.java b/src/main/java/forge/gui/toolbox/FComboBoxWrapper.java index ac56969e313..eb025bab8a2 100644 --- a/src/main/java/forge/gui/toolbox/FComboBoxWrapper.java +++ b/src/main/java/forge/gui/toolbox/FComboBoxWrapper.java @@ -8,11 +8,10 @@ import java.util.ArrayList; import java.util.Vector; import javax.swing.ComboBoxModel; -import javax.swing.JComboBox; import javax.swing.ListCellRenderer; /** - * Wrapper for combo box with extra logic (either FComboBoxWrapper or FComboBoxPanel should be used instead of JComboBox so skinning works) + * Wrapper for combo box with extra logic (either FComboBoxWrapper or FComboBoxPanel should be used instead of FComboBox so skinning works) * */ public class FComboBoxWrapper { @@ -25,30 +24,30 @@ public class FComboBoxWrapper { } } - private JComboBox comboBox; + private FComboBox comboBox; private Object constraints; public FComboBoxWrapper() { super(); - this.comboBox = new JComboBox(); + this.comboBox = new FComboBox(); allWrappers.add(this); } public FComboBoxWrapper(E[] items) { super(); - this.comboBox = new JComboBox(items); + this.comboBox = new FComboBox(items); allWrappers.add(this); } public FComboBoxWrapper(Vector items) { super(); - this.comboBox = new JComboBox(items); + this.comboBox = new FComboBox(items); allWrappers.add(this); } public FComboBoxWrapper(ComboBoxModel aModel) { super(); - this.comboBox = new JComboBox(aModel); + this.comboBox = new FComboBox(aModel); allWrappers.add(this); } @@ -129,10 +128,10 @@ public class FComboBoxWrapper { //refresh combo box skin by replacing it with a copy of itself //TODO: Figure out if there's a better way, as calling updateUI doesn't seem to work - public static JComboBox refreshComboBoxSkin(JComboBox comboBox) { + public static FComboBox refreshComboBoxSkin(FComboBox comboBox) { return refreshComboBoxSkin(comboBox, null); } - public static JComboBox refreshComboBoxSkin(JComboBox comboBox, Object constraints) { + public static FComboBox refreshComboBoxSkin(FComboBox comboBox, Object constraints) { //find index of combo box within parent Container parent = comboBox.getParent(); if (parent == null) { return comboBox; } @@ -145,7 +144,7 @@ public class FComboBoxWrapper { } //create copy of combo box - JComboBox newComboBox = new JComboBox(); + FComboBox newComboBox = new FComboBox(); for (int i = 0; i < comboBox.getItemCount(); i++) { newComboBox.addItem(comboBox.getItemAt(i)); }