From 524ebee67d85b4aa153667acfaa6df28c2934728 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 13 Jan 2021 21:16:39 -0500 Subject: [PATCH] config panel: fix combobox displayed size The size was being computed from the enum names during the getPreferredSize() call due to not having the renderer set yet. Additionally the old prototype display value was not being used during this as it was not set yet, either. --- .../client/plugins/config/ConfigPanel.java | 14 +++++++++----- .../client/ui/components/ComboBoxListRenderer.java | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index fe6a5b54a2..b72286e3b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -487,15 +487,19 @@ class ConfigPanel extends PluginPanel if (cid.getType().isEnum()) { Class type = (Class) cid.getType(); - JComboBox box = new JComboBox(type.getEnumConstants()); + + JComboBox> box = new JComboBox>(type.getEnumConstants()); // NOPMD: UseDiamondOperator + // set renderer prior to calling box.getPreferredSize(), since it will invoke the renderer + // to build components for each combobox element in order to compute the display size of the + // combobox + box.setRenderer(new ComboBoxListRenderer<>()); box.setPreferredSize(new Dimension(box.getPreferredSize().width, 25)); - box.setRenderer(new ComboBoxListRenderer()); box.setForeground(Color.WHITE); box.setFocusable(false); - box.setPrototypeDisplayValue("XXXXXXXX"); //sorry but this is the way to keep the size of the combobox in check. + try { - Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName())); + Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName())); box.setSelectedItem(selectedItem); box.setToolTipText(Text.titleCase(selectedItem)); } @@ -508,7 +512,7 @@ class ConfigPanel extends PluginPanel if (e.getStateChange() == ItemEvent.SELECTED) { changeConfiguration(box, cd, cid); - box.setToolTipText(Text.titleCase((Enum) box.getSelectedItem())); + box.setToolTipText(Text.titleCase((Enum) box.getSelectedItem())); } }); item.add(box, BorderLayout.EAST); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/ComboBoxListRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/components/ComboBoxListRenderer.java index 5aeb710115..b73700134c 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/ComboBoxListRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/ComboBoxListRenderer.java @@ -39,11 +39,11 @@ import net.runelite.client.util.Text; * was very hard to see in the dark gray background, this makes the selected * item white and adds some padding to the elements for more readable list. */ -public final class ComboBoxListRenderer extends JLabel implements ListCellRenderer +public final class ComboBoxListRenderer extends JLabel implements ListCellRenderer { @Override - public Component getListCellRendererComponent(JList list, Object o, int index, boolean isSelected, boolean cellHasFocus) + public Component getListCellRendererComponent(JList list, T o, int index, boolean isSelected, boolean cellHasFocus) { if (isSelected) {