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:
parent
9148edc7cf
commit
61c8759faf
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user