1
0
mirror of https://gitlab.com/annimon/imagetagger.git synced 2024-09-20 05:44:20 +03:00

Fix JLabel foreground

This commit is contained in:
Victor 2021-01-09 16:11:31 +02:00
parent 9148edc7cf
commit 61c8759faf
4 changed files with 64 additions and 27 deletions

View File

@ -25,8 +25,10 @@ public class Main extends JFrame {
return;
}
var main = new Main(config);
main.setVisible(true);
EventQueue.invokeLater(() -> {
var main = new Main(config);
main.setVisible(true);
});
}
public Main(Config config) {

View File

@ -1,13 +1,13 @@
package com.annimon.imagetagger.beans;
import javax.swing.*;
import com.annimon.imagetagger.views.ColoredLabel;
public class TagButtonHolder {
private final TagButton tagButton;
private final JLabel label;
private final ColoredLabel label;
public TagButtonHolder(TagButton tagButton, JLabel label) {
public TagButtonHolder(TagButton tagButton, ColoredLabel label) {
this.tagButton = tagButton;
this.label = label;
}
@ -16,7 +16,7 @@ public class TagButtonHolder {
return tagButton;
}
public JLabel getLabel() {
public ColoredLabel getLabel() {
return label;
}
}

View File

@ -0,0 +1,52 @@
package com.annimon.imagetagger.views;
import java.awt.*;
import javax.swing.*;
public class ColoredLabel extends JLabel {
private static final int MAX_COLORS = 8;
private static final Color ENABLED_TEXT = Color.WHITE;
private static final Color DISABLED_TEXT = new Color(0xA9A9A9);
private final float hue;
private boolean isToggled;
public ColoredLabel(String key, String tag) {
super(key + ": " + tag);
isToggled = false;
hue = (tag.hashCode() % MAX_COLORS) * (1f / MAX_COLORS);
init();
}
private void init() {
setFont(getFont().deriveFont(11f));
setBorder(BorderFactory.createEmptyBorder(3, 6, 3, 6));
setOpaque(true);
setToggled(false);
}
public void toggle() {
setToggled(!isToggled);
}
public void setToggled(boolean toggled) {
isToggled = toggled;
if (toggled) {
setBackground(Color.getHSBColor(hue, 0.90f, 0.65f));
setForeground(ENABLED_TEXT);
} else {
setBackground(Color.getHSBColor(hue, 0.6f, 0.22f));
setForeground(DISABLED_TEXT);
}
}
public boolean isToggled() {
return isToggled;
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
}
}

View File

@ -2,7 +2,6 @@ package com.annimon.imagetagger.views;
import com.annimon.imagetagger.beans.TagButton;
import com.annimon.imagetagger.beans.TagButtonHolder;
import java.awt.*;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -13,8 +12,6 @@ import javax.swing.*;
public class TagPanel extends JPanel {
private static final int MAX_COLORS = 8;
private final Map<String, TagButtonHolder> tagButtons;
public TagPanel(List<TagButton> buttons) {
@ -23,29 +20,16 @@ public class TagPanel extends JPanel {
setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
for (TagButton button : buttons) {
final var key = button.getKey();
final var label = new JLabel(key + ": " + button.getTag());
label.setBorder(BorderFactory.createEmptyBorder(3, 6, 3, 6));
label.setOpaque(true);
label.setEnabled(false);
setBackground(label, button);
final var label = new ColoredLabel(key, button.getTag());
add(label);
tagButtons.put(key, new TagButtonHolder(button, label));
}
}
private void setBackground(JLabel label, TagButton button) {
final boolean enabled = label.isEnabled();
final float hue = (button.getTag().hashCode() % MAX_COLORS) * (1f / MAX_COLORS);
final var color = Color.getHSBColor(hue, enabled ? 0.99f : 0.6f, enabled ? 0.95f : 0.28f);
label.setBackground(color);
}
public void toggle(String key) {
final var holder = tagButtons.get(key);
if (holder != null) {
final var label = holder.getLabel();
label.setEnabled(!label.isEnabled());
setBackground(label, holder.getTagButton());
holder.getLabel().toggle();
}
}
@ -62,7 +46,7 @@ public class TagPanel extends JPanel {
}
private Predicate<TagButtonHolder> enabledLabelPredicate() {
return h -> h.getLabel().isEnabled();
return h -> h.getLabel().isToggled();
}
private Set<String> filterTags(Predicate<TagButtonHolder> predicate) {
@ -77,8 +61,7 @@ public class TagPanel extends JPanel {
final var label = holder.getLabel();
final var tagButton = holder.getTagButton();
final var containsTag = tags.contains(tagButton.getTag());
label.setEnabled(containsTag);
setBackground(label, tagButton);
label.setToggled(containsTag);
});
}
}