@DMGregory was right: adding it over infinitely is NOT the correct way to handle this--so dealing with it in the render() method is NO-GO.
How I solved this is as follows. I checked for the position in the Input Handlers and then added/removed the blinking behavior in a procedural fashion:
stage.setKeyboardFocus(gameVolumeSlider);
gameVolumeSliderLabel.addAction(Actions.forever(Actions.sequence(fadeIn(.5f),fadeOut(.5f))));
stage.addListener(new InputListener() {
public boolean keyDown (InputEvent event, int keycode) {
if (keycode == Keys.DOWN || keycode == Keys.S) {
if (buttonToggleState == 3) {
buttonToggleState = 1;
} else {
buttonToggleState++;
}
System.out.println(buttonToggleState);
if(buttonToggleState == 1){
gameVolumeSliderLabel.addAction(Actions.forever(Actions.sequence(fadeIn(.5f),fadeOut(.5f))));
backButton.clearActions();
backButton.addAction(fadeIn(.5f));
}
if(buttonToggleState == 2){
musicVolumeSliderLabel.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.sequence(fadeIn(.5f),fadeOut(.5f))));
gameVolumeSliderLabel.clearActions();
gameVolumeSliderLabel.addAction(fadeIn(.5f));
}
if(buttonToggleState == 3){
backButton.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.sequence(fadeIn(.5f),fadeOut(.5f))));
musicVolumeSliderLabel.clearActions();
musicVolumeSliderLabel.addAction(fadeIn(.5f));
}
}
if (keycode == Input.Keys.UP || keycode == Keys.W) {
if (buttonToggleState == 1) {
buttonToggleState = 3;
} else {
buttonToggleState--;
}
System.out.println(buttonToggleState);
if(buttonToggleState == 1){
gameVolumeSliderLabel.addAction(Actions.forever(Actions.sequence(fadeIn(.5f),fadeOut(.5f))));
musicVolumeSliderLabel.clearActions();
musicVolumeSliderLabel.addAction(fadeIn(.5f));
}
if(buttonToggleState == 2){
musicVolumeSliderLabel.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.sequence(fadeIn(.5f),fadeOut(.5f))));
backButton.clearActions();
backButton.addAction(fadeIn(.5f));
}
if(buttonToggleState == 3){
backButton.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.sequence(fadeIn(.5f),fadeOut(.5f))));
gameVolumeSliderLabel.clearActions();
gameVolumeSliderLabel.addAction(fadeIn(.5f));
}
}
So in conclusion it was doing the exact opposite because this was unintended behavior. The render loop was calling the if that was evaluating to true over and over and over again and I think it was keeping that method call from animating because it was constantly stuck in a loop re-adding those instructions(?) That's my theory, either way... this is how you solve it and add the desired blinking behavior to Actors on a Table on a Stage with keyboard input in LIBGDX.scene2d.ui.