Настройка JColorChooser - Как мы можем установить градиентный фон для JColorChooser - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу установить градиентный фон для JColorChooser.В основном я пытаюсь расширить класс BasicColorChooserUI, а затем переопределить метод PaintComponents.Но это не влияет на ColorChooser.

public class AseColorChooserUI extends BasicColorChooserUI {

protected JColorChooser chooser;

JTabbedPane tabbedPane;
JPanel singlePanel;

JPanel previewPanelHolder;

private static final Color COLOR_0 = new Color(200, 200, 255);
private static final Color COLOR_1 = Color.BLUE;

protected AbstractColorChooserPanel[] defaultChoosers;

JComponent previewPanel;
public static ComponentUI createUI(JComponent c) {
    return new AseColorChooserUI();
}


public void installUI( JComponent c ) {
    chooser = (JColorChooser)c;

    super.installUI( c );
    chooser.getPreviewPanel().setOpaque(false);

    defaultChoosers = createDefaultChoosers();
    chooser.setChooserPanels(defaultChoosers);

    installDefaults();

    Component[] comps = chooser.getComponents();
    recursiveTransparent(comps);

}

protected void installDefaults() {
    LookAndFeel.installColorsAndFont(chooser, "ColorChooser.background",
                                          "ColorChooser.foreground",
                                          "ColorChooser.font");
    LookAndFeel.installProperty(chooser, "opaque", Boolean.FALSE);


}

private void recursiveTransparent(Component[] comps) {
    for (Component comp : comps) {
        if (comp instanceof JComponent && !(comp instanceof JList)) {
            ((JComponent) comp).setOpaque(false);
        }
        if (comp instanceof Container) {
            Component[] subComps = ((Container) comp).getComponents();
            recursiveTransparent(subComps);
        }
        if (comp instanceof JButton) {
            Component[] subComps = ((Container) comp).getComponents();
            recursiveTransparent(subComps);
        }
    }
}

protected void paintComponent(Graphics g, JComponent c) {
    super.paint(g,c);
    Graphics2D g2 = (Graphics2D) g;
    Point p0 = new Point(0, 0);
    Point p1 = new Point(chooser.getWidth(), chooser.getHeight());
    Paint paint = new GradientPaint(p0 , COLOR_0, p1, COLOR_1);
    g2.setPaint(paint);
    g2.fillRect(0, 0, p1.x, p1.y);
}

}

Есть ли способ, с помощью которого я могу установить градиентный фон для JColorChooser, а также для компонентов.

...