From e18c7a4718a117dffb4b709154e90f11224eb994 Mon Sep 17 00:00:00 2001 From: malenkov Date: Wed, 7 May 2008 21:54:03 +0400 Subject: 6348456: BasicColorChooserUI ignores JColorChooser selection model changes Summary: Some methods are moved from AbstractColorChooserPanel to BasicColorChooserUI Reviewed-by: peterz, alexp --- .../colorchooser/AbstractColorChooserPanel.java | 36 +------------------- .../swing/plaf/basic/BasicColorChooserUI.java | 39 ++++++++++++++-------- 2 files changed, 27 insertions(+), 48 deletions(-) (limited to 'src/share/classes/javax/swing') diff --git a/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java b/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java index c01c99290..9fa819ba9 100644 --- a/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java +++ b/src/share/classes/javax/swing/colorchooser/AbstractColorChooserPanel.java @@ -1,5 +1,5 @@ /* - * Copyright 1998-2001 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,9 +26,7 @@ package javax.swing.colorchooser; import java.awt.*; -import java.io.Serializable; import javax.swing.*; -import javax.swing.event.*; /** * This is the abstract superclass for color choosers. If you want to add @@ -54,17 +52,6 @@ public abstract class AbstractColorChooserPanel extends JPanel { */ private JColorChooser chooser; - /** - * - */ - private ChangeListener colorListener; - - /** - * - */ - private boolean dirty = true; - - /** * Invoked automatically when the model's state changes. * It is also called by installChooserPanel to allow @@ -157,8 +144,6 @@ public abstract class AbstractColorChooserPanel extends JPanel { chooser = enclosingChooser; buildChooser(); updateChooser(); - colorListener = new ModelListener(); - getColorSelectionModel().addChangeListener(colorListener); } /** @@ -166,7 +151,6 @@ public abstract class AbstractColorChooserPanel extends JPanel { * If override this, be sure to call super. */ public void uninstallChooserPanel(JColorChooser enclosingChooser) { - getColorSelectionModel().removeChangeListener(colorListener); chooser = null; } @@ -192,10 +176,6 @@ public abstract class AbstractColorChooserPanel extends JPanel { * @param g the Graphics object */ public void paint(Graphics g) { - if (dirty) { - updateChooser(); - dirty = false; - } super.paint(g); } @@ -222,18 +202,4 @@ public abstract class AbstractColorChooserPanel extends JPanel { } return defaultValue; } - - /** - * - */ - class ModelListener implements ChangeListener, Serializable { - public void stateChanged(ChangeEvent e) { - if (isShowing()) { // isVisible - updateChooser(); - dirty = false; - } else { - dirty = true; - } - } - } } diff --git a/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java b/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java index 43d28fed0..fd63e7fcb 100644 --- a/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java +++ b/src/share/classes/javax/swing/plaf/basic/BasicColorChooserUI.java @@ -1,5 +1,5 @@ /* - * Copyright 1997-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,16 +30,12 @@ import javax.swing.colorchooser.*; import javax.swing.event.*; import javax.swing.border.*; import javax.swing.plaf.*; -import java.util.*; import java.awt.*; -import java.awt.image.*; import java.awt.event.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.Serializable; import sun.swing.DefaultLookup; -import sun.swing.UIAction; /** * Provides the basic look and feel for a JColorChooser. @@ -212,9 +208,24 @@ public class BasicColorChooserUI extends ColorChooserUI protected void uninstallListeners() { chooser.removePropertyChangeListener( propertyChangeListener ); chooser.getSelectionModel().removeChangeListener(previewListener); + previewListener = null; previewPanel.removeMouseListener(getHandler()); } + private void selectionChanged(ColorSelectionModel model) { + if (this.previewPanel != null) { + this.previewPanel.setForeground(model.getSelectedColor()); + this.previewPanel.repaint(); + } + AbstractColorChooserPanel[] panels = this.chooser.getChooserPanels(); + if (panels != null) { + for (AbstractColorChooserPanel panel : panels) { + if (panel != null) { + panel.updateChooser(); + } + } + } + } private class Handler implements ChangeListener, MouseListener, PropertyChangeListener { @@ -222,11 +233,7 @@ public class BasicColorChooserUI extends ColorChooserUI // ChangeListener // public void stateChanged(ChangeEvent evt) { - ColorSelectionModel model = (ColorSelectionModel)evt.getSource(); - if (previewPanel != null) { - previewPanel.setForeground(model.getSelectedColor()); - previewPanel.repaint(); - } + selectionChanged((ColorSelectionModel) evt.getSource()); } // @@ -302,13 +309,19 @@ public class BasicColorChooserUI extends ColorChooserUI newPanels[i].installChooserPanel(chooser); } } - - if (prop == JColorChooser.PREVIEW_PANEL_PROPERTY) { + else if (prop == JColorChooser.PREVIEW_PANEL_PROPERTY) { if (evt.getNewValue() != previewPanel) { installPreviewPanel(); } } - if (prop == "componentOrientation") { + else if (prop == JColorChooser.SELECTION_MODEL_PROPERTY) { + ColorSelectionModel oldModel = (ColorSelectionModel) evt.getOldValue(); + oldModel.removeChangeListener(previewListener); + ColorSelectionModel newModel = (ColorSelectionModel) evt.getNewValue(); + newModel.addChangeListener(previewListener); + selectionChanged(newModel); + } + else if (prop == "componentOrientation") { ComponentOrientation o = (ComponentOrientation)evt.getNewValue(); JColorChooser cc = (JColorChooser)evt.getSource(); -- cgit v1.2.3