diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java index 9c7b92806e..5b53380daa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java @@ -28,12 +28,15 @@ package net.runelite.client.plugins.skillcalculator; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JCheckBox; @@ -108,6 +111,12 @@ class SkillCalculator extends JPanel uiInput.getUiFieldTargetLevel().addActionListener(e -> onFieldTargetLevelUpdated()); uiInput.getUiFieldTargetXP().addActionListener(e -> onFieldTargetXPUpdated()); + + // Register focus listeners to calculate xp when exiting a text field + uiInput.getUiFieldCurrentLevel().addFocusListener(buildFocusAdapter(e -> onFieldCurrentLevelUpdated())); + uiInput.getUiFieldCurrentXP().addFocusListener(buildFocusAdapter(e -> onFieldCurrentXPUpdated())); + uiInput.getUiFieldTargetLevel().addFocusListener(buildFocusAdapter(e -> onFieldTargetLevelUpdated())); + uiInput.getUiFieldTargetXP().addFocusListener(buildFocusAdapter(e -> onFieldTargetXPUpdated())); } void openCalculator(CalculatorType calculatorType) @@ -413,4 +422,15 @@ class SkillCalculator extends JPanel return slot.getAction().getName().toLowerCase().contains(text.toLowerCase()); } + private FocusAdapter buildFocusAdapter(Consumer focusLostConsumer) + { + return new FocusAdapter() + { + @Override + public void focusLost(FocusEvent e) + { + focusLostConsumer.accept(e); + } + }; + } }