UiTheme.java
package org.hammer.audio.ui.theme;
import com.formdev.flatlaf.FlatDarkLaf;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
/** Shared Swing look-and-feel and component styling helpers. */
public final class UiTheme {
private static final Font BASE_FONT = new Font(Font.SANS_SERIF, Font.PLAIN, 13);
private UiTheme() {}
/** Installs dark FlatLaf and applies global defaults. */
public static void installDarkTheme() {
FlatDarkLaf.setup();
UIManager.put("defaultFont", BASE_FONT);
UIManager.put("Component.arc", 8);
UIManager.put("TextComponent.arc", 8);
UIManager.put("Button.arc", 10);
UIManager.put("ScrollBar.thumbArc", 999);
UIManager.put("TabbedPane.showTabSeparators", true);
}
/** Applies compact, consistent padding to controls. */
public static void applyCompactPadding(
JComponent component, int top, int left, int bottom, int right) {
Border current = component.getBorder();
EmptyBorder padding = new EmptyBorder(top, left, bottom, right);
if (current == null) {
component.setBorder(padding);
return;
}
component.setBorder(new CompoundBorder(current, padding));
}
/** Creates a subtle panel border suitable for dashboard cards. */
public static Border createPanelBorder() {
return BorderFactory.createCompoundBorder(
new LineBorder(PlotRenderTheme.AXIS_COLOR, 1, true), new EmptyBorder(6, 8, 6, 8));
}
}