src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java

Print this page




 380             JComponent c) {
 381         super.getBaselineResizeBehavior(c);
 382         // NOTE: BasicSpinner really provides for CENTER_OFFSET, but
 383         // the default min/pref size is smaller than it should be
 384         // so that getBaseline() doesn't implement the contract
 385         // for CENTER_OFFSET as defined in Component.
 386         return Component.BaselineResizeBehavior.OTHER;
 387     }
 388 
 389     /**
 390      * Returns true if all the labels from the label table have the same
 391      * baseline.
 392      *
 393      * @return true if all the labels from the label table have the
 394      *         same baseline
 395      * @since 1.6
 396      */
 397     protected boolean labelsHaveSameBaselines() {
 398         if (!checkedLabelBaselines) {
 399             checkedLabelBaselines = true;
 400             Dictionary<?, JComponent> dictionary = slider.getLabelTable();
 401             if (dictionary != null) {
 402                 sameLabelBaselines = true;
 403                 Enumeration<JComponent> elements = dictionary.elements();
 404                 int baseline = -1;
 405                 while (elements.hasMoreElements()) {
 406                     JComponent label = elements.nextElement();
 407                     Dimension pref = label.getPreferredSize();
 408                     int labelBaseline = label.getBaseline(pref.width,
 409                                                           pref.height);
 410                     if (labelBaseline >= 0) {
 411                         if (baseline == -1) {
 412                             baseline = labelBaseline;
 413                         }
 414                         else if (baseline != labelBaseline) {
 415                             sameLabelBaselines = false;
 416                             break;
 417                         }
 418                     }
 419                     else {
 420                         sameLabelBaselines = false;
 421                         break;
 422                     }
 423                 }


 736         }
 737         else {
 738             size.width = 11;
 739             size.height = 20;
 740         }
 741 
 742         return size;
 743     }
 744 
 745     public class PropertyChangeHandler implements PropertyChangeListener {
 746         // NOTE: This class exists only for backward compatibility. All
 747         // its functionality has been moved into Handler. If you need to add
 748         // new functionality add it to the Handler, but make sure this
 749         // class calls into the Handler.
 750         public void propertyChange( PropertyChangeEvent e ) {
 751             getHandler().propertyChange(e);
 752         }
 753     }
 754 
 755     protected int getWidthOfWidestLabel() {
 756         Dictionary<?, JComponent> dictionary = slider.getLabelTable();
 757         int widest = 0;
 758         if ( dictionary != null ) {
 759             Enumeration<?> keys = dictionary.keys();
 760             while ( keys.hasMoreElements() ) {
 761                 JComponent label = dictionary.get(keys.nextElement());
 762                 widest = Math.max( label.getPreferredSize().width, widest );
 763             }
 764         }
 765         return widest;
 766     }
 767 
 768     protected int getHeightOfTallestLabel() {
 769         Dictionary<?, JComponent> dictionary = slider.getLabelTable();
 770         int tallest = 0;
 771         if ( dictionary != null ) {
 772             Enumeration<?> keys = dictionary.keys();
 773             while ( keys.hasMoreElements() ) {
 774                 JComponent label = dictionary.get(keys.nextElement());
 775                 tallest = Math.max( label.getPreferredSize().height, tallest );
 776             }
 777         }
 778         return tallest;
 779     }
 780 
 781     protected int getWidthOfHighValueLabel() {
 782         Component label = getHighestValueLabel();
 783         int width = 0;
 784 
 785         if ( label != null ) {
 786             width = label.getPreferredSize().width;
 787         }
 788 
 789         return width;


 854 
 855         while (keys.hasMoreElements()) {
 856             Integer i = keys.nextElement();
 857 
 858             if (max == null || i > max) {
 859                 max = i;
 860             }
 861         }
 862 
 863         return max;
 864     }
 865 
 866     /**
 867      * Returns the smallest value that has an entry in the label table.
 868      *
 869      * @return smallest value that has an entry in the label table, or
 870      *         null.
 871      * @since 1.6
 872      */
 873     protected Integer getLowestValue() {
 874         Dictionary<Integer, JComponent> dictionary = slider.getLabelTable();
 875 
 876         if (dictionary == null) {
 877             return null;
 878         }
 879 
 880         Enumeration<Integer> keys = dictionary.keys();
 881 
 882         Integer min = null;
 883 
 884         while (keys.hasMoreElements()) {
 885             Integer i = keys.nextElement();
 886 
 887             if (min == null || i < min) {
 888                 min = i;
 889             }
 890         }
 891 
 892         return min;
 893     }
 894 


1104 
1105     protected void paintMinorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
1106         g.drawLine( x, 0, x, tickBounds.height / 2 - 1 );
1107     }
1108 
1109     protected void paintMajorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
1110         g.drawLine( x, 0, x, tickBounds.height - 2 );
1111     }
1112 
1113     protected void paintMinorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
1114         g.drawLine( 0, y, tickBounds.width / 2 - 1, y );
1115     }
1116 
1117     protected void paintMajorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
1118         g.drawLine( 0, y,  tickBounds.width - 2, y );
1119     }
1120 
1121     public void paintLabels( Graphics g ) {
1122         Rectangle labelBounds = labelRect;
1123 
1124         Dictionary<Integer, JComponent> dictionary = slider.getLabelTable();
1125         if ( dictionary != null ) {
1126             Enumeration<Integer> keys = dictionary.keys();
1127             int minValue = slider.getMinimum();
1128             int maxValue = slider.getMaximum();
1129             boolean enabled = slider.isEnabled();
1130             while ( keys.hasMoreElements() ) {
1131                 Integer key = keys.nextElement();
1132                 int value = key.intValue();
1133                 if (value >= minValue && value <= maxValue) {
1134                     JComponent label = dictionary.get(key);
1135                     label.setEnabled(enabled);
1136 
1137                     if (label instanceof JLabel) {
1138                         Icon icon = label.isEnabled() ? ((JLabel) label).getIcon() : ((JLabel) label).getDisabledIcon();
1139 
1140                         if (icon instanceof ImageIcon) {
1141                             // Register Slider as an image observer. It allows to catch notifications about
1142                             // image changes (e.g. gif animation)
1143                             Toolkit.getDefaultToolkit().checkImage(((ImageIcon) icon).getImage(), -1, -1, slider);
1144                         }




 380             JComponent c) {
 381         super.getBaselineResizeBehavior(c);
 382         // NOTE: BasicSpinner really provides for CENTER_OFFSET, but
 383         // the default min/pref size is smaller than it should be
 384         // so that getBaseline() doesn't implement the contract
 385         // for CENTER_OFFSET as defined in Component.
 386         return Component.BaselineResizeBehavior.OTHER;
 387     }
 388 
 389     /**
 390      * Returns true if all the labels from the label table have the same
 391      * baseline.
 392      *
 393      * @return true if all the labels from the label table have the
 394      *         same baseline
 395      * @since 1.6
 396      */
 397     protected boolean labelsHaveSameBaselines() {
 398         if (!checkedLabelBaselines) {
 399             checkedLabelBaselines = true;
 400             Dictionary<Integer, ? extends JComponent> dictionary = slider.getLabelTable();
 401             if (dictionary != null) {
 402                 sameLabelBaselines = true;
 403                 Enumeration<? extends JComponent> elements = dictionary.elements();
 404                 int baseline = -1;
 405                 while (elements.hasMoreElements()) {
 406                     JComponent label = elements.nextElement();
 407                     Dimension pref = label.getPreferredSize();
 408                     int labelBaseline = label.getBaseline(pref.width,
 409                                                           pref.height);
 410                     if (labelBaseline >= 0) {
 411                         if (baseline == -1) {
 412                             baseline = labelBaseline;
 413                         }
 414                         else if (baseline != labelBaseline) {
 415                             sameLabelBaselines = false;
 416                             break;
 417                         }
 418                     }
 419                     else {
 420                         sameLabelBaselines = false;
 421                         break;
 422                     }
 423                 }


 736         }
 737         else {
 738             size.width = 11;
 739             size.height = 20;
 740         }
 741 
 742         return size;
 743     }
 744 
 745     public class PropertyChangeHandler implements PropertyChangeListener {
 746         // NOTE: This class exists only for backward compatibility. All
 747         // its functionality has been moved into Handler. If you need to add
 748         // new functionality add it to the Handler, but make sure this
 749         // class calls into the Handler.
 750         public void propertyChange( PropertyChangeEvent e ) {
 751             getHandler().propertyChange(e);
 752         }
 753     }
 754 
 755     protected int getWidthOfWidestLabel() {
 756         Dictionary<?, ? extends JComponent> dictionary = slider.getLabelTable();
 757         int widest = 0;
 758         if ( dictionary != null ) {
 759             Enumeration<?> keys = dictionary.keys();
 760             while ( keys.hasMoreElements() ) {
 761                 JComponent label = dictionary.get(keys.nextElement());
 762                 widest = Math.max( label.getPreferredSize().width, widest );
 763             }
 764         }
 765         return widest;
 766     }
 767 
 768     protected int getHeightOfTallestLabel() {
 769         Dictionary<?, ? extends JComponent> dictionary = slider.getLabelTable();
 770         int tallest = 0;
 771         if ( dictionary != null ) {
 772             Enumeration<?> keys = dictionary.keys();
 773             while ( keys.hasMoreElements() ) {
 774                 JComponent label = dictionary.get(keys.nextElement());
 775                 tallest = Math.max( label.getPreferredSize().height, tallest );
 776             }
 777         }
 778         return tallest;
 779     }
 780 
 781     protected int getWidthOfHighValueLabel() {
 782         Component label = getHighestValueLabel();
 783         int width = 0;
 784 
 785         if ( label != null ) {
 786             width = label.getPreferredSize().width;
 787         }
 788 
 789         return width;


 854 
 855         while (keys.hasMoreElements()) {
 856             Integer i = keys.nextElement();
 857 
 858             if (max == null || i > max) {
 859                 max = i;
 860             }
 861         }
 862 
 863         return max;
 864     }
 865 
 866     /**
 867      * Returns the smallest value that has an entry in the label table.
 868      *
 869      * @return smallest value that has an entry in the label table, or
 870      *         null.
 871      * @since 1.6
 872      */
 873     protected Integer getLowestValue() {
 874         Dictionary<Integer, ? extends JComponent> dictionary = slider.getLabelTable();
 875 
 876         if (dictionary == null) {
 877             return null;
 878         }
 879 
 880         Enumeration<Integer> keys = dictionary.keys();
 881 
 882         Integer min = null;
 883 
 884         while (keys.hasMoreElements()) {
 885             Integer i = keys.nextElement();
 886 
 887             if (min == null || i < min) {
 888                 min = i;
 889             }
 890         }
 891 
 892         return min;
 893     }
 894 


1104 
1105     protected void paintMinorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
1106         g.drawLine( x, 0, x, tickBounds.height / 2 - 1 );
1107     }
1108 
1109     protected void paintMajorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
1110         g.drawLine( x, 0, x, tickBounds.height - 2 );
1111     }
1112 
1113     protected void paintMinorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
1114         g.drawLine( 0, y, tickBounds.width / 2 - 1, y );
1115     }
1116 
1117     protected void paintMajorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
1118         g.drawLine( 0, y,  tickBounds.width - 2, y );
1119     }
1120 
1121     public void paintLabels( Graphics g ) {
1122         Rectangle labelBounds = labelRect;
1123 
1124         Dictionary<Integer, ? extends JComponent> dictionary = slider.getLabelTable();
1125         if ( dictionary != null ) {
1126             Enumeration<Integer> keys = dictionary.keys();
1127             int minValue = slider.getMinimum();
1128             int maxValue = slider.getMaximum();
1129             boolean enabled = slider.isEnabled();
1130             while ( keys.hasMoreElements() ) {
1131                 Integer key = keys.nextElement();
1132                 int value = key.intValue();
1133                 if (value >= minValue && value <= maxValue) {
1134                     JComponent label = dictionary.get(key);
1135                     label.setEnabled(enabled);
1136 
1137                     if (label instanceof JLabel) {
1138                         Icon icon = label.isEnabled() ? ((JLabel) label).getIcon() : ((JLabel) label).getDisabledIcon();
1139 
1140                         if (icon instanceof ImageIcon) {
1141                             // Register Slider as an image observer. It allows to catch notifications about
1142                             // image changes (e.g. gif animation)
1143                             Toolkit.getDefaultToolkit().checkImage(((ImageIcon) icon).getImage(), -1, -1, slider);
1144                         }