Finished dark design and implementing important Components
This commit is contained in:
@@ -5,8 +5,10 @@
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.awt.*;
|
||||
import java.util.Vector;
|
||||
|
||||
@@ -27,6 +29,40 @@ public class OACComboBox<E> extends JComboBox<E> implements OACComponent {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
setOpaque(true);
|
||||
setRenderer(createDesignRenderer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
setRenderer(createDesignRenderer());
|
||||
}
|
||||
|
||||
private ListCellRenderer<? super E> createDesignRenderer() {
|
||||
Color fallbackBg = getBackground() != null ? getBackground() : UIManager.getColor("ComboBox.background");
|
||||
Color fallbackFg = getForeground() != null ? getForeground() : UIManager.getColor("ComboBox.foreground");
|
||||
if (fallbackBg == null) fallbackBg = Color.DARK_GRAY;
|
||||
if (fallbackFg == null) fallbackFg = Color.LIGHT_GRAY;
|
||||
|
||||
Color bg = DesignManager.resolveBackground(OACComboBox.class, fallbackBg);
|
||||
Color fg = DesignManager.resolveForeground(OACComboBox.class, fallbackFg);
|
||||
Color selBg = DesignManager.resolveHovered(OACButton.class, bg.darker());
|
||||
Color selFg = fg;
|
||||
|
||||
DefaultListCellRenderer base = new DefaultListCellRenderer();
|
||||
return (list, value, index, isSelected, cellHasFocus) -> {
|
||||
JLabel label = (JLabel) base.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
label.setOpaque(true);
|
||||
label.setBorder(new EmptyBorder(4, 8, 4, 8));
|
||||
label.setBackground(isSelected ? selBg : bg);
|
||||
label.setForeground(isSelected ? selFg : fg);
|
||||
return label;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
return OACComponent.super.add(comp);
|
||||
|
||||
@@ -2,12 +2,30 @@ package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
import org.openautonomousconnection.oacswing.component.design.OACColor;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ComponentAdapter;
|
||||
import java.awt.event.ComponentEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
|
||||
public class OACDialog extends JDialog implements OACComponent {
|
||||
private static final int TITLE_HEIGHT = 30;
|
||||
private static final EmptyBorder TITLE_INSET = new EmptyBorder(TITLE_HEIGHT, 0, 0, 0);
|
||||
private static final String CONTENT_BASE_BORDER_PROPERTY = "oac.dialog.content.baseBorder";
|
||||
private static final String CONTENT_BORDER_CAPTURED_PROPERTY = "oac.dialog.content.baseBorderCaptured";
|
||||
|
||||
private OACPanel titleRoot;
|
||||
private OACLabel titleLabel;
|
||||
private boolean titleBarInstalled;
|
||||
private boolean titleHandlersInstalled;
|
||||
private Point dragStartOnScreen;
|
||||
private Point dragStartDialogLocation;
|
||||
|
||||
public OACDialog() {
|
||||
super();
|
||||
initDialog();
|
||||
@@ -54,10 +72,151 @@ public class OACDialog extends JDialog implements OACComponent {
|
||||
}
|
||||
|
||||
private void initDialog() {
|
||||
setUndecorated(true);
|
||||
DesignManager.apply(this);
|
||||
setBackground(OACColor.DARK_BACKGROUND.getColor());
|
||||
getContentPane().setBackground(OACColor.DARK_BACKGROUND.getColor());
|
||||
getContentPane().setForeground(OACColor.DARK_TEXT.getColor());
|
||||
Color dialogBackground = DesignManager.resolveBackground(OACDialog.class, getBackground());
|
||||
Color dialogForeground = DesignManager.resolveForeground(OACDialog.class, getForeground());
|
||||
setBackground(dialogBackground);
|
||||
getContentPane().setBackground(dialogBackground);
|
||||
getContentPane().setForeground(dialogForeground);
|
||||
|
||||
installTitleHandlersIfNeeded();
|
||||
updateTitleBar();
|
||||
}
|
||||
|
||||
private void installTitleHandlersIfNeeded() {
|
||||
if (titleHandlersInstalled) {
|
||||
return;
|
||||
}
|
||||
addComponentListener(new ComponentAdapter() {
|
||||
@Override
|
||||
public void componentResized(ComponentEvent e) {
|
||||
if (titleRoot != null) {
|
||||
titleRoot.setBounds(0, 0, getWidth(), TITLE_HEIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void componentShown(ComponentEvent e) {
|
||||
if (titleRoot != null) {
|
||||
titleRoot.setBounds(0, 0, getWidth(), TITLE_HEIGHT);
|
||||
}
|
||||
}
|
||||
});
|
||||
titleHandlersInstalled = true;
|
||||
}
|
||||
|
||||
private void ensureTitleComponents() {
|
||||
if (titleRoot != null && titleLabel != null) {
|
||||
return;
|
||||
}
|
||||
titleRoot = new OACPanel(new BorderLayout());
|
||||
titleRoot.setOpaque(true);
|
||||
titleRoot.setBorder(new EmptyBorder(6, 12, 6, 12));
|
||||
|
||||
titleLabel = new OACLabel();
|
||||
titleRoot.add(titleLabel, BorderLayout.WEST);
|
||||
|
||||
MouseAdapter drag = new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
dragStartOnScreen = e.getLocationOnScreen();
|
||||
dragStartDialogLocation = getLocation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged(MouseEvent e) {
|
||||
if (dragStartOnScreen == null || dragStartDialogLocation == null) {
|
||||
return;
|
||||
}
|
||||
Point now = e.getLocationOnScreen();
|
||||
int dx = now.x - dragStartOnScreen.x;
|
||||
int dy = now.y - dragStartOnScreen.y;
|
||||
setLocation(dragStartDialogLocation.x + dx, dragStartDialogLocation.y + dy);
|
||||
}
|
||||
};
|
||||
titleRoot.addMouseListener(drag);
|
||||
titleRoot.addMouseMotionListener(drag);
|
||||
}
|
||||
|
||||
private void updateTitleBar() {
|
||||
String title = getTitle();
|
||||
boolean hasTitle = title != null && !title.isBlank();
|
||||
JLayeredPane layeredPane = getLayeredPane();
|
||||
|
||||
if (!hasTitle) {
|
||||
if (titleBarInstalled && titleRoot != null && layeredPane != null) {
|
||||
layeredPane.remove(titleRoot);
|
||||
layeredPane.revalidate();
|
||||
layeredPane.repaint();
|
||||
titleBarInstalled = false;
|
||||
}
|
||||
applyContentInset(false);
|
||||
return;
|
||||
}
|
||||
|
||||
ensureTitleComponents();
|
||||
|
||||
Color bg = DesignManager.resolveBackground(OACDialog.class, getBackground());
|
||||
Color fg = DesignManager.resolveForeground(OACDialog.class, getForeground());
|
||||
titleRoot.setBackground(bg);
|
||||
titleLabel.setForeground(fg);
|
||||
titleLabel.setText(title);
|
||||
|
||||
if (!titleBarInstalled && layeredPane != null) {
|
||||
layeredPane.add(titleRoot, JLayeredPane.DRAG_LAYER);
|
||||
titleBarInstalled = true;
|
||||
}
|
||||
|
||||
titleRoot.setBounds(0, 0, getWidth(), TITLE_HEIGHT);
|
||||
applyContentInset(true);
|
||||
}
|
||||
|
||||
private void applyContentInset(boolean hasTitle) {
|
||||
Container content = super.getContentPane();
|
||||
if (!(content instanceof JComponent jContent)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Boolean.TRUE.equals(jContent.getClientProperty(CONTENT_BORDER_CAPTURED_PROPERTY))) {
|
||||
jContent.putClientProperty(CONTENT_BASE_BORDER_PROPERTY, jContent.getBorder());
|
||||
jContent.putClientProperty(CONTENT_BORDER_CAPTURED_PROPERTY, Boolean.TRUE);
|
||||
}
|
||||
|
||||
Border baseBorder = (Border) jContent.getClientProperty(CONTENT_BASE_BORDER_PROPERTY);
|
||||
if (hasTitle) {
|
||||
jContent.setBorder(baseBorder == null ? TITLE_INSET : new CompoundBorder(TITLE_INSET, baseBorder));
|
||||
} else {
|
||||
jContent.setBorder(baseBorder);
|
||||
}
|
||||
|
||||
jContent.revalidate();
|
||||
jContent.repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContentPane(Container contentPane) {
|
||||
super.setContentPane(contentPane);
|
||||
|
||||
if (contentPane instanceof Component component) {
|
||||
component.setBackground(DesignManager.resolveBackground(OACDialog.class, component.getBackground()));
|
||||
component.setForeground(DesignManager.resolveForeground(OACDialog.class, component.getForeground()));
|
||||
}
|
||||
if (contentPane instanceof JComponent jContent) {
|
||||
jContent.putClientProperty(CONTENT_BORDER_CAPTURED_PROPERTY, Boolean.FALSE);
|
||||
jContent.putClientProperty(CONTENT_BASE_BORDER_PROPERTY, null);
|
||||
}
|
||||
if (contentPane instanceof OACComponent oacComponent) {
|
||||
oacComponent.initDesign();
|
||||
}
|
||||
|
||||
updateTitleBar();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTitle(String title) {
|
||||
super.setTitle(title);
|
||||
updateTitleBar();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -27,6 +28,30 @@ public class OACList<E> extends JList<E> implements OACComponent {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
private void applyDesignColors() {
|
||||
Color bg = DesignManager.resolveBackground(OACList.class, getBackground());
|
||||
Color fg = DesignManager.resolveForeground(OACList.class, getForeground());
|
||||
Color selBg = DesignManager.resolveHovered(OACButton.class, bg.darker());
|
||||
Color selFg = fg;
|
||||
|
||||
setOpaque(true);
|
||||
setBackground(bg);
|
||||
setForeground(fg);
|
||||
setSelectionBackground(selBg);
|
||||
setSelectionForeground(selFg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -4,10 +4,18 @@
|
||||
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ContainerAdapter;
|
||||
import java.awt.event.ContainerEvent;
|
||||
import java.awt.event.ComponentAdapter;
|
||||
import java.awt.event.ComponentEvent;
|
||||
|
||||
public class OACMenu extends JMenu implements OACComponent {
|
||||
private JPopupMenu observedPopup;
|
||||
|
||||
public OACMenu() {
|
||||
super();
|
||||
}
|
||||
@@ -24,6 +32,61 @@ public class OACMenu extends JMenu implements OACComponent {
|
||||
super(s, b);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
applyDesignColors();
|
||||
setOpaque(true);
|
||||
installPopupAutoApply();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
applyDesignColors();
|
||||
installPopupAutoApply();
|
||||
}
|
||||
|
||||
private void applyDesignColors() {
|
||||
setBackground(DesignManager.resolveBackground(OACMenu.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACMenu.class, getForeground()));
|
||||
applyPopupDesign();
|
||||
}
|
||||
|
||||
private void installPopupAutoApply() {
|
||||
JPopupMenu popup = getPopupMenu();
|
||||
if (observedPopup == popup) {
|
||||
return;
|
||||
}
|
||||
popup.addContainerListener(new ContainerAdapter() {
|
||||
@Override
|
||||
public void componentAdded(ContainerEvent e) {
|
||||
applyPopupDesign();
|
||||
}
|
||||
});
|
||||
popup.addComponentListener(new ComponentAdapter() {
|
||||
@Override
|
||||
public void componentShown(ComponentEvent e) {
|
||||
applyPopupDesign();
|
||||
}
|
||||
});
|
||||
observedPopup = popup;
|
||||
}
|
||||
|
||||
private void applyPopupDesign() {
|
||||
JPopupMenu popup = getPopupMenu();
|
||||
popup.setBackground(DesignManager.resolveBackground(OACPopupMenu.class, popup.getBackground()));
|
||||
popup.setForeground(DesignManager.resolveForeground(OACPopupMenu.class, popup.getForeground()));
|
||||
for (Component child : popup.getComponents()) {
|
||||
if (child instanceof OACComponent oac) {
|
||||
oac.initDesign();
|
||||
} else if (child instanceof JComponent jc) {
|
||||
jc.setOpaque(true);
|
||||
jc.setBackground(DesignManager.resolveBackground(OACMenuItem.class, jc.getBackground()));
|
||||
jc.setForeground(DesignManager.resolveForeground(OACMenuItem.class, jc.getForeground()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -14,6 +15,20 @@ public class OACMenuBar extends JMenuBar implements OACComponent {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
setOpaque(true);
|
||||
setBackground(DesignManager.resolveBackground(OACMenuBar.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACMenuBar.class, getForeground()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
setBackground(DesignManager.resolveBackground(OACMenuBar.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACMenuBar.class, getForeground()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -34,6 +35,23 @@ public class OACMenuItem extends JMenuItem implements OACComponent {
|
||||
super(text, mnemonic);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
applyDesignColors();
|
||||
setOpaque(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
private void applyDesignColors() {
|
||||
setBackground(DesignManager.resolveBackground(OACMenuItem.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACMenuItem.class, getForeground()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -59,7 +59,7 @@ public class OACOptionPane extends JOptionPane implements OACComponent {
|
||||
Object[] options,
|
||||
Object initialValue) throws HeadlessException {
|
||||
AtomicInteger result = new AtomicInteger(CLOSED_OPTION);
|
||||
OACDialog dialog = new OACDialog(JOptionPane.getFrameForComponent(parentComponent), title, true);
|
||||
OACDialog dialog = new OACDialog(JOptionPane.getFrameForComponent(parentComponent), null, true);
|
||||
dialog.setUndecorated(true);
|
||||
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||||
dialog.setContentPane(buildDialogContent(title, message, icon, optionType, options, result, dialog));
|
||||
@@ -78,6 +78,71 @@ public class OACOptionPane extends JOptionPane implements OACComponent {
|
||||
return result.get();
|
||||
}
|
||||
|
||||
public static int showConfirmDialog(Component parentComponent, Object message) throws HeadlessException {
|
||||
return showConfirmDialog(parentComponent, message, "Select an Option", YES_NO_CANCEL_OPTION);
|
||||
}
|
||||
|
||||
public static int showConfirmDialog(Component parentComponent,
|
||||
Object message,
|
||||
String title,
|
||||
int optionType) throws HeadlessException {
|
||||
return showConfirmDialog(parentComponent, message, title, optionType, QUESTION_MESSAGE);
|
||||
}
|
||||
|
||||
public static int showConfirmDialog(Component parentComponent,
|
||||
Object message,
|
||||
String title,
|
||||
int optionType,
|
||||
int messageType) throws HeadlessException {
|
||||
return showConfirmDialog(parentComponent, message, title, optionType, messageType, null);
|
||||
}
|
||||
|
||||
public static int showConfirmDialog(Component parentComponent,
|
||||
Object message,
|
||||
String title,
|
||||
int optionType,
|
||||
int messageType,
|
||||
Icon icon) throws HeadlessException {
|
||||
return showOptionDialog(
|
||||
parentComponent,
|
||||
message,
|
||||
title,
|
||||
optionType,
|
||||
messageType,
|
||||
icon != null ? icon : resolveDefaultIcon(messageType),
|
||||
null,
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
public static void showMessageDialog(Component parentComponent, Object message) throws HeadlessException {
|
||||
showMessageDialog(parentComponent, message, "Message", INFORMATION_MESSAGE);
|
||||
}
|
||||
|
||||
public static void showMessageDialog(Component parentComponent,
|
||||
Object message,
|
||||
String title,
|
||||
int messageType) throws HeadlessException {
|
||||
showMessageDialog(parentComponent, message, title, messageType, null);
|
||||
}
|
||||
|
||||
public static void showMessageDialog(Component parentComponent,
|
||||
Object message,
|
||||
String title,
|
||||
int messageType,
|
||||
Icon icon) throws HeadlessException {
|
||||
showOptionDialog(
|
||||
parentComponent,
|
||||
message,
|
||||
title,
|
||||
DEFAULT_OPTION,
|
||||
messageType,
|
||||
icon != null ? icon : resolveDefaultIcon(messageType),
|
||||
new Object[]{"OK"},
|
||||
"OK"
|
||||
);
|
||||
}
|
||||
|
||||
private static Container buildDialogContent(String title,
|
||||
Object message,
|
||||
Icon icon,
|
||||
@@ -87,7 +152,6 @@ public class OACOptionPane extends JOptionPane implements OACComponent {
|
||||
OACDialog dialog) {
|
||||
OACPanel root = new OACPanel(new BorderLayout());
|
||||
Color background = DesignManager.resolveBackground(OACOptionPane.class, root.getBackground());
|
||||
Color headerBackground = DesignManager.resolveBackground(OACTitleBar.class, background.darker());
|
||||
Color foreground = DesignManager.resolveForeground(OACOptionPane.class, Color.LIGHT_GRAY);
|
||||
Color borderColor = DesignManager.resolveBorderColor(foreground.darker());
|
||||
|
||||
@@ -95,12 +159,8 @@ public class OACOptionPane extends JOptionPane implements OACComponent {
|
||||
root.setBorder(BorderFactory.createLineBorder(borderColor, 1));
|
||||
|
||||
OACPanel header = new OACPanel(new BorderLayout());
|
||||
header.setBorder(new EmptyBorder(10, 12, 10, 12));
|
||||
header.setBackground(headerBackground);
|
||||
JSeparator separator = new JSeparator(SwingConstants.HORIZONTAL);
|
||||
separator.setForeground(borderColor);
|
||||
separator.setBackground(borderColor);
|
||||
header.add(separator, BorderLayout.SOUTH);
|
||||
header.setBorder(new EmptyBorder(0, 12, 8, 12));
|
||||
header.setBackground(background);
|
||||
|
||||
OACLabel titleLabel = new OACLabel(title == null ? "" : title);
|
||||
titleLabel.setForeground(foreground);
|
||||
@@ -116,14 +176,24 @@ public class OACOptionPane extends JOptionPane implements OACComponent {
|
||||
center.add(iconLabel, BorderLayout.WEST);
|
||||
}
|
||||
|
||||
JTextArea messageArea = new JTextArea(String.valueOf(message));
|
||||
messageArea.setEditable(false);
|
||||
messageArea.setLineWrap(true);
|
||||
messageArea.setWrapStyleWord(true);
|
||||
messageArea.setOpaque(false);
|
||||
messageArea.setForeground(foreground);
|
||||
messageArea.setBorder(null);
|
||||
center.add(messageArea, BorderLayout.CENTER);
|
||||
if (message instanceof Component messageComponent) {
|
||||
if (messageComponent instanceof OACComponent oacComponent) {
|
||||
oacComponent.initDesign();
|
||||
} else {
|
||||
messageComponent.setBackground(background);
|
||||
messageComponent.setForeground(foreground);
|
||||
}
|
||||
center.add(messageComponent, BorderLayout.CENTER);
|
||||
} else {
|
||||
JTextArea messageArea = new JTextArea(String.valueOf(message));
|
||||
messageArea.setEditable(false);
|
||||
messageArea.setLineWrap(true);
|
||||
messageArea.setWrapStyleWord(true);
|
||||
messageArea.setOpaque(false);
|
||||
messageArea.setForeground(foreground);
|
||||
messageArea.setBorder(null);
|
||||
center.add(messageArea, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
OACPanel buttons = new OACPanel(new FlowLayout(FlowLayout.RIGHT, 8, 8));
|
||||
buttons.setBackground(background);
|
||||
@@ -177,6 +247,15 @@ public class OACOptionPane extends JOptionPane implements OACComponent {
|
||||
};
|
||||
}
|
||||
|
||||
private static Icon resolveDefaultIcon(int messageType) {
|
||||
return switch (messageType) {
|
||||
case ERROR_MESSAGE -> UIManager.getIcon("OptionPane.errorIcon");
|
||||
case WARNING_MESSAGE -> UIManager.getIcon("OptionPane.warningIcon");
|
||||
case QUESTION_MESSAGE -> UIManager.getIcon("OptionPane.questionIcon");
|
||||
default -> UIManager.getIcon("OptionPane.informationIcon");
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -18,6 +19,20 @@ public class OACPopupMenu extends JPopupMenu implements OACComponent {
|
||||
super(label);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
setOpaque(true);
|
||||
setBackground(DesignManager.resolveBackground(OACPopupMenu.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACPopupMenu.class, getForeground()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
setBackground(DesignManager.resolveBackground(OACPopupMenu.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACPopupMenu.class, getForeground()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -5,8 +5,10 @@
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.plaf.basic.BasicScrollBarUI;
|
||||
import java.awt.*;
|
||||
|
||||
public class OACScrollBar extends JScrollBar implements OACComponent {
|
||||
@@ -22,6 +24,90 @@ public class OACScrollBar extends JScrollBar implements OACComponent {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
setUI(createDesignUI());
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
private void applyDesignColors() {
|
||||
setBackground(DesignManager.resolveBackground(OACScrollBar.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACScrollBar.class, getForeground()));
|
||||
setOpaque(true);
|
||||
setBorder(null);
|
||||
}
|
||||
|
||||
private BasicScrollBarUI createDesignUI() {
|
||||
Color track = DesignManager.resolveBackground(OACScrollBar.class, getBackground());
|
||||
Color thumb = DesignManager.resolveHovered(OACButton.class, track.darker());
|
||||
if (thumb == null || thumb.equals(track)) {
|
||||
thumb = DesignManager.resolveBorderColor(track.brighter());
|
||||
}
|
||||
final Color trackColor = track;
|
||||
final Color thumbColor = thumb;
|
||||
|
||||
return new BasicScrollBarUI() {
|
||||
@Override
|
||||
protected JButton createDecreaseButton(int orientation) {
|
||||
return createZeroButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JButton createIncreaseButton(int orientation) {
|
||||
return createZeroButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
|
||||
g.setColor(trackColor);
|
||||
g.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
|
||||
if (thumbBounds.isEmpty() || !scrollbar.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
Graphics2D g2 = (Graphics2D) g.create();
|
||||
try {
|
||||
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
g2.setColor(thumbColor);
|
||||
int arc = scrollbar.getOrientation() == Adjustable.VERTICAL ? thumbBounds.width : thumbBounds.height;
|
||||
g2.fillRoundRect(
|
||||
thumbBounds.x + 2,
|
||||
thumbBounds.y + 2,
|
||||
Math.max(0, thumbBounds.width - 4),
|
||||
Math.max(0, thumbBounds.height - 4),
|
||||
arc,
|
||||
arc
|
||||
);
|
||||
} finally {
|
||||
g2.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private JButton createZeroButton() {
|
||||
JButton button = new JButton();
|
||||
button.setOpaque(false);
|
||||
button.setFocusable(false);
|
||||
button.setBorderPainted(false);
|
||||
button.setContentAreaFilled(false);
|
||||
button.setBorder(null);
|
||||
Dimension zero = new Dimension(0, 0);
|
||||
button.setPreferredSize(zero);
|
||||
button.setMinimumSize(zero);
|
||||
button.setMaximumSize(zero);
|
||||
return button;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -5,8 +5,10 @@
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.plaf.UIResource;
|
||||
import java.awt.*;
|
||||
|
||||
public class OACScrollPane extends JScrollPane implements OACComponent {
|
||||
@@ -26,6 +28,142 @@ public class OACScrollPane extends JScrollPane implements OACComponent {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JScrollBar createVerticalScrollBar() {
|
||||
return new OACScrollBar(JScrollBar.VERTICAL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JScrollBar createHorizontalScrollBar() {
|
||||
return new OACScrollBar(JScrollBar.HORIZONTAL);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JViewport createViewport() {
|
||||
return new OACViewport();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
applyDesignColors();
|
||||
ensureOACSubcomponents();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
applyDesignColors();
|
||||
ensureOACSubcomponents();
|
||||
}
|
||||
|
||||
private void applyDesignColors() {
|
||||
setOpaque(true);
|
||||
Color bg = DesignManager.resolveBackground(OACScrollPane.class, getBackground());
|
||||
Color fg = DesignManager.resolveForeground(OACScrollPane.class, getForeground());
|
||||
setBackground(bg);
|
||||
setForeground(fg);
|
||||
setBorder(null);
|
||||
setViewportBorder(null);
|
||||
|
||||
JViewport viewport = getViewport();
|
||||
if (viewport != null) {
|
||||
viewport.setOpaque(true);
|
||||
viewport.setBackground(bg);
|
||||
viewport.setForeground(fg);
|
||||
}
|
||||
|
||||
JScrollBar vertical = getVerticalScrollBar();
|
||||
if (vertical != null) {
|
||||
vertical.setBackground(DesignManager.resolveBackground(OACScrollBar.class, bg));
|
||||
vertical.setForeground(DesignManager.resolveForeground(OACScrollBar.class, fg));
|
||||
}
|
||||
|
||||
JScrollBar horizontal = getHorizontalScrollBar();
|
||||
if (horizontal != null) {
|
||||
horizontal.setBackground(DesignManager.resolveBackground(OACScrollBar.class, bg));
|
||||
horizontal.setForeground(DesignManager.resolveForeground(OACScrollBar.class, fg));
|
||||
}
|
||||
|
||||
setCorner(UPPER_LEFT_CORNER, createCorner(bg));
|
||||
setCorner(UPPER_RIGHT_CORNER, createCorner(bg));
|
||||
setCorner(LOWER_LEFT_CORNER, createCorner(bg));
|
||||
setCorner(LOWER_RIGHT_CORNER, createCorner(bg));
|
||||
|
||||
applyViewportViewDesign(bg, fg);
|
||||
}
|
||||
|
||||
private void ensureOACSubcomponents() {
|
||||
if (!(getVerticalScrollBar() instanceof OACScrollBar)) {
|
||||
JScrollBar old = getVerticalScrollBar();
|
||||
OACScrollBar replacement = new OACScrollBar(JScrollBar.VERTICAL);
|
||||
replacement.setModel(old.getModel());
|
||||
setVerticalScrollBar(replacement);
|
||||
}
|
||||
if (!(getHorizontalScrollBar() instanceof OACScrollBar)) {
|
||||
JScrollBar old = getHorizontalScrollBar();
|
||||
OACScrollBar replacement = new OACScrollBar(JScrollBar.HORIZONTAL);
|
||||
replacement.setModel(old.getModel());
|
||||
setHorizontalScrollBar(replacement);
|
||||
}
|
||||
if (!(getViewport() instanceof OACViewport)) {
|
||||
JViewport oldViewport = getViewport();
|
||||
OACViewport replacement = new OACViewport();
|
||||
replacement.setView(oldViewport.getView());
|
||||
setViewport(replacement);
|
||||
}
|
||||
|
||||
if (getVerticalScrollBar() instanceof OACComponent oacVertical) {
|
||||
oacVertical.initDesign();
|
||||
}
|
||||
if (getHorizontalScrollBar() instanceof OACComponent oacHorizontal) {
|
||||
oacHorizontal.initDesign();
|
||||
}
|
||||
if (getViewport() instanceof OACComponent oacViewport) {
|
||||
oacViewport.initDesign();
|
||||
}
|
||||
applyViewportViewDesign(
|
||||
DesignManager.resolveBackground(OACScrollPane.class, getBackground()),
|
||||
DesignManager.resolveForeground(OACScrollPane.class, getForeground())
|
||||
);
|
||||
}
|
||||
|
||||
private static JComponent createCorner(Color color) {
|
||||
JPanel corner = new JPanel(new BorderLayout());
|
||||
corner.setOpaque(true);
|
||||
corner.setBackground(color);
|
||||
corner.setBorder(null);
|
||||
return corner;
|
||||
}
|
||||
|
||||
private void applyViewportViewDesign(Color bg, Color fg) {
|
||||
JViewport viewport = getViewport();
|
||||
if (viewport == null) {
|
||||
return;
|
||||
}
|
||||
Component view = viewport.getView();
|
||||
if (view == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (view instanceof OACComponent oacView) {
|
||||
oacView.initDesign();
|
||||
return;
|
||||
}
|
||||
|
||||
if (view instanceof JComponent jView) {
|
||||
if (jView.getBackground() == null || jView.getBackground() instanceof UIResource) {
|
||||
jView.setBackground(bg);
|
||||
}
|
||||
if (jView.getForeground() == null || jView.getForeground() instanceof UIResource) {
|
||||
jView.setForeground(fg);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
view.setBackground(bg);
|
||||
view.setForeground(fg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -5,11 +5,15 @@
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.plaf.basic.BasicTabbedPaneUI;
|
||||
import java.awt.*;
|
||||
|
||||
public class OACTabbedPane extends JTabbedPane implements OACComponent {
|
||||
private boolean selectionSyncInstalled;
|
||||
|
||||
public OACTabbedPane() {
|
||||
super();
|
||||
}
|
||||
@@ -22,22 +26,136 @@ public class OACTabbedPane extends JTabbedPane implements OACComponent {
|
||||
super(tabPlacement, tabLayoutPolicy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
private void applyDesignColors() {
|
||||
Color bg = DesignManager.resolveBackground(OACTabbedPane.class, getBackground());
|
||||
Color fg = DesignManager.resolveForeground(OACTabbedPane.class, getForeground());
|
||||
Color selectedBg = DesignManager.resolveHovered(OACButton.class, bg.darker());
|
||||
Color selectedFg = fg;
|
||||
Color border = DesignManager.resolveBorderColor(bg.darker());
|
||||
|
||||
setOpaque(true);
|
||||
setBackground(bg);
|
||||
setForeground(fg);
|
||||
setUI(new DesignTabbedPaneUI(bg, selectedBg, border));
|
||||
applyTabItemColors(bg, fg, selectedBg, selectedFg);
|
||||
installSelectionSyncIfNeeded();
|
||||
}
|
||||
|
||||
private void applyTabItemColors(Color bg, Color fg, Color selectedBg, Color selectedFg) {
|
||||
int selectedIndex = getSelectedIndex();
|
||||
for (int i = 0; i < getTabCount(); i++) {
|
||||
boolean selected = i == selectedIndex;
|
||||
setBackgroundAt(i, selected ? selectedBg : bg);
|
||||
setForegroundAt(i, selected ? selectedFg : fg);
|
||||
}
|
||||
repaint();
|
||||
}
|
||||
|
||||
private void installSelectionSyncIfNeeded() {
|
||||
if (selectionSyncInstalled) {
|
||||
return;
|
||||
}
|
||||
addChangeListener(e -> {
|
||||
Color bg = DesignManager.resolveBackground(OACTabbedPane.class, getBackground());
|
||||
Color fg = DesignManager.resolveForeground(OACTabbedPane.class, getForeground());
|
||||
Color selectedBg = DesignManager.resolveHovered(OACButton.class, bg.darker());
|
||||
applyTabItemColors(bg, fg, selectedBg, fg);
|
||||
});
|
||||
selectionSyncInstalled = true;
|
||||
}
|
||||
|
||||
private static final class DesignTabbedPaneUI extends BasicTabbedPaneUI {
|
||||
private final Color background;
|
||||
private final Color selectedBackground;
|
||||
private final Color borderColor;
|
||||
|
||||
private DesignTabbedPaneUI(Color background, Color selectedBackground, Color borderColor) {
|
||||
this.background = background;
|
||||
this.selectedBackground = selectedBackground;
|
||||
this.borderColor = borderColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintTabBackground(Graphics g, int tabPlacement, int tabIndex,
|
||||
int x, int y, int w, int h, boolean isSelected) {
|
||||
g.setColor(isSelected ? selectedBackground : background);
|
||||
g.fillRect(x, y, w, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex,
|
||||
int x, int y, int w, int h, boolean isSelected) {
|
||||
g.setColor(borderColor);
|
||||
g.drawRect(x, y, w, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintFocusIndicator(Graphics g, int tabPlacement, Rectangle[] rects,
|
||||
int tabIndex, Rectangle iconRect, Rectangle textRect, boolean isSelected) {
|
||||
// no-op to avoid bright LAF focus ring
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) {
|
||||
int width = tabPane.getWidth();
|
||||
int height = tabPane.getHeight();
|
||||
Insets insets = tabPane.getInsets();
|
||||
|
||||
int x = insets.left;
|
||||
int y = insets.top;
|
||||
int w = width - insets.right - insets.left;
|
||||
int h = height - insets.top - insets.bottom;
|
||||
|
||||
switch (tabPlacement) {
|
||||
case LEFT -> {
|
||||
x += calculateTabAreaWidth(tabPlacement, runCount, maxTabWidth);
|
||||
w -= (x - insets.left);
|
||||
}
|
||||
case RIGHT -> w -= calculateTabAreaWidth(tabPlacement, runCount, maxTabWidth);
|
||||
case BOTTOM -> h -= calculateTabAreaHeight(tabPlacement, runCount, maxTabHeight);
|
||||
default -> {
|
||||
y += calculateTabAreaHeight(tabPlacement, runCount, maxTabHeight);
|
||||
h -= (y - insets.top);
|
||||
}
|
||||
}
|
||||
|
||||
g.setColor(background);
|
||||
g.fillRect(x, y, w, h);
|
||||
g.setColor(borderColor);
|
||||
g.drawRect(x, y, Math.max(0, w - 1), Math.max(0, h - 1));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTab(String title, Component component) {
|
||||
this.initOther(component);
|
||||
super.addTab(title, component);
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTab(String title, Icon icon, Component component) {
|
||||
this.initOther(component);
|
||||
super.addTab(title, icon, component);
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTab(String title, Icon icon, Component component, String tip) {
|
||||
this.initOther(component);
|
||||
super.addTab(title, icon, component, tip);
|
||||
applyDesignColors();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -38,6 +38,7 @@ public class OACTextArea extends JTextArea implements OACComponent {
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
applyDesignColors();
|
||||
setOpaque(true);
|
||||
setMargin(new Insets(6, 10, 6, 10));
|
||||
setBorder(DesignManager.createTextComponentBorder());
|
||||
@@ -46,6 +47,18 @@ public class OACTextArea extends JTextArea implements OACComponent {
|
||||
setSelectedTextColor(getBackground().brighter());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
applyDesignColors();
|
||||
setBorder(DesignManager.createTextComponentBorder());
|
||||
}
|
||||
|
||||
private void applyDesignColors() {
|
||||
setBackground(DesignManager.resolveBackground(OACTextArea.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACTextArea.class, getForeground()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -36,6 +36,7 @@ public class OACTextField extends JTextField implements OACComponent {
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
applyDesignColors();
|
||||
setOpaque(true);
|
||||
applyInputBorder();
|
||||
setCaretColor(getForeground());
|
||||
@@ -47,9 +48,15 @@ public class OACTextField extends JTextField implements OACComponent {
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
applyDesignColors();
|
||||
applyInputBorder();
|
||||
}
|
||||
|
||||
private void applyDesignColors() {
|
||||
setBackground(DesignManager.resolveBackground(OACTextField.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACTextField.class, getForeground()));
|
||||
}
|
||||
|
||||
private void applyInputBorder() {
|
||||
setBorder(new CompoundBorder(
|
||||
new RoundedBorder(DesignManager.resolveBorderColor(getForeground()), 10, 2),
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package org.openautonomousconnection.oacswing.component;
|
||||
|
||||
import lombok.NonNull;
|
||||
import org.openautonomousconnection.oacswing.component.design.DesignManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -14,6 +15,20 @@ public class OACViewport extends JViewport implements OACComponent {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
setOpaque(true);
|
||||
setBackground(DesignManager.resolveBackground(OACViewport.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACViewport.class, getForeground()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
setBackground(DesignManager.resolveBackground(OACViewport.class, getBackground()));
|
||||
setForeground(DesignManager.resolveForeground(OACViewport.class, getForeground()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component add(Component comp) {
|
||||
this.initOther(comp);
|
||||
|
||||
@@ -42,27 +42,31 @@ public class DesignManager {
|
||||
false
|
||||
));
|
||||
|
||||
Design.DARK.getElements().put(OACCheckBox.class, new DesignFlags(OACColor.DARK_INPUT_FIELD));
|
||||
Design.DARK.getElements().put(OACCheckBoxMenuItem.class, new DesignFlags(OACColor.DARK_ITEM));
|
||||
Design.DARK.getElements().put(OACCheckBox.class, new DesignFlags(OACColor.DARK_INPUT_FIELD, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACCheckBoxMenuItem.class, new DesignFlags(OACColor.DARK_INPUT_BUTTON, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACTextField.class, new DesignFlags(OACColor.DARK_INPUT_FIELD, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACTextArea.class, new DesignFlags(OACColor.DARK_INPUT_FIELD, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACColorChooser.class, new DesignFlags(OACColor.DARK_SECTION));
|
||||
Design.DARK.getElements().put(OACComboBox.class, new DesignFlags(OACColor.DARK_INPUT_FIELD));
|
||||
Design.DARK.getElements().put(OACComboBox.class, new DesignFlags(OACColor.DARK_INPUT_FIELD, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACTabbedPane.class, new DesignFlags(OACColor.DARK_SECTION, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACFrame.class, new DesignFlags(OACColor.DARK_BACKGROUND));
|
||||
Design.DARK.getElements().put(OACLabel.class, new DesignFlags(OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACLabel.class, new DesignFlags(OACColor.DARK_BACKGROUND, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACLayeredPane.class, new DesignFlags(OACColor.DARK_BACKGROUND));
|
||||
Design.DARK.getElements().put(OACList.class, new DesignFlags(OACColor.DARK_SECTION));
|
||||
Design.DARK.getElements().put(OACMenu.class, new DesignFlags(OACColor.DARK_INPUT_BUTTON));
|
||||
Design.DARK.getElements().put(OACMenuBar.class, new DesignFlags(OACColor.DARK_SECTION));
|
||||
Design.DARK.getElements().put(OACMenuItem.class, new DesignFlags(OACColor.DARK_ITEM));
|
||||
Design.DARK.getElements().put(OACList.class, new DesignFlags(OACColor.DARK_SECTION, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACMenu.class, new DesignFlags(OACColor.DARK_INPUT_BUTTON, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACMenuBar.class, new DesignFlags(OACColor.DARK_SECTION, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACMenuItem.class, new DesignFlags(OACColor.DARK_INPUT_BUTTON, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACOptionPane.class, new DesignFlags(OACColor.DARK_BACKGROUND));
|
||||
Design.DARK.getElements().put(OACPanel.class, new DesignFlags(OACColor.DARK_BACKGROUND, false));
|
||||
Design.DARK.getElements().put(OACPasswordField.class, new DesignFlags(OACColor.DARK_INPUT_FIELD, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACPopupMenu.class, new DesignFlags(OACColor.DARK_BACKGROUND));
|
||||
Design.DARK.getElements().put(OACProgressBar.class, new DesignFlags(OACColor.DARK_ITEM));
|
||||
Design.DARK.getElements().put(OACRadioButton.class, new DesignFlags(OACColor.DARK_BUTTON));
|
||||
Design.DARK.getElements().put(OACDialog.class, new DesignFlags(OACColor.DARK_BACKGROUND));
|
||||
Design.DARK.getElements().put(OACTitleBar.class, new DesignFlags(OACColor.DARK_HEADER));
|
||||
Design.DARK.getElements().put(OACPopupMenu.class, new DesignFlags(OACColor.DARK_BACKGROUND, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACProgressBar.class, new DesignFlags(OACColor.DARK_ITEM, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACRadioButton.class, new DesignFlags(OACColor.DARK_BUTTON, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACScrollPane.class, new DesignFlags(OACColor.DARK_SECTION, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACScrollBar.class, new DesignFlags(OACColor.DARK_SECTION, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACViewport.class, new DesignFlags(OACColor.DARK_SECTION, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACDialog.class, new DesignFlags(OACColor.DARK_BACKGROUND, OACColor.DARK_TEXT));
|
||||
Design.DARK.getElements().put(OACTitleBar.class, new DesignFlags(OACColor.DARK_HEADER, OACColor.DARK_TEXT));
|
||||
|
||||
Design.DARK.border = new RoundedBorder(OACColor.DARK_BORDERS.getColor(), 18, 1);
|
||||
globalDesign = Design.DARK;
|
||||
@@ -122,7 +126,12 @@ public class DesignManager {
|
||||
if (hasBorder) {
|
||||
jComponent.setBorder(globalDesign.getBorder());
|
||||
jComponent.setOpaque(false);
|
||||
} else if (!(jComponent instanceof OACTitleBar) && !(jComponent instanceof JTextComponent)) {
|
||||
} else if (!(jComponent instanceof OACTitleBar)
|
||||
&& !(jComponent instanceof JTextComponent)
|
||||
&& !(jComponent instanceof JViewport)
|
||||
&& !(jComponent instanceof JScrollPane)
|
||||
&& !(jComponent instanceof JScrollBar)
|
||||
&& !(jComponent instanceof JTabbedPane)) {
|
||||
Border currentBorder = jComponent.getBorder();
|
||||
if (currentBorder == null || hasZeroInsets(currentBorder, jComponent)) {
|
||||
jComponent.setBorder(INVISIBLE_BORDER);
|
||||
|
||||
Reference in New Issue
Block a user