|
What this is
Other links
The source codepackage com.incors.plaf.kunststoff; /* * This code was developed by INCORS GmbH (www.incors.com). * It is published under the terms of the GNU Lesser General Public License. */ import java.awt.*; import javax.swing.*; import javax.swing.plaf.*; import javax.swing.plaf.basic.*; /** * From version 2.0 the KunststoffListUI works with the DefaultListCellRenderer, * which makes it really plug and play! */ public class KunststoffListUI extends BasicListUI { private boolean isToolkitTrueColor = false; private Color colBg; public KunststoffListUI(JComponent list) { // this will be needed for the decision if a big gradient or a small shadow // should be painted. On 16-bit colors the big gradient looks awkward, therefore // we will then paint a small shadow instead isToolkitTrueColor = KunststoffUtilities.isToolkitTrueColor(list); } public static ComponentUI createUI(JComponent list) { return new KunststoffListUI(list); } public void update(Graphics g, JComponent c) { if (c.isOpaque()) { Graphics2D g2D = (Graphics2D) g; Color colorBackground = c.getBackground(); int shadow = KunststoffLookAndFeel.getBackgroundGradientShadow(); // we will only paint the background if the background color is not null if (colorBackground != null) { Rectangle clipBounds = g.getClipBounds(); if (shadow == 0) { // paint the background without gradient g2D.setColor(colorBackground); g2D.fill(clipBounds); } else { // create the shadow color int red = colorBackground.getRed(); int green = colorBackground.getGreen(); int blue = colorBackground.getBlue(); Color colorShadow = new Color(red>=shadow?red-shadow:0, green>=shadow?green-shadow:0, blue>=shadow?blue-shadow:0); if (isToolkitTrueColor) { // paint big horizontal gradient Rectangle rect = new Rectangle(0, 0, list.getWidth(), list.getHeight()); KunststoffUtilities.drawGradient(g, colorBackground, colorShadow, rect, clipBounds, false); } else { g2D.setColor(colorBackground); g2D.fill(clipBounds); // create faded shadow color Color colorShadowFaded = KunststoffUtilities.getTranslucentColor(colorShadow, 0); // paint shadow at top GradientPaint gradientTop = new GradientPaint(0f, 0f, colorShadow, 0f, 5f, colorShadowFaded); g2D.setPaint(gradientTop); g2D.fill(new Rectangle(clipBounds.x, clipBounds.y, clipBounds.width, 20)); // paint shadow at left GradientPaint gradientLeft = new GradientPaint(0f, 0f, colorShadow, 5f, 0f, colorShadowFaded); g2D.setPaint(gradientLeft); g2D.fill(new Rectangle(clipBounds.x, clipBounds.y, 20, clipBounds.height)); } } } } paint(g, c); } // We temporarily make the renderer transparent if the row is not selected // and the renderer is a JComponent (like DefaultListCellRenderer) and the // background color is a ColorUIResource (which means it probably has the // original color assigned by the Look&Feel). protected void paintCell(Graphics g, int row, Rectangle rowBounds, ListCellRenderer cellRenderer, ListModel dataModel, ListSelectionModel selModel, int leadIndex) { if (cellRenderer instanceof JComponent && !selModel.isSelectedIndex(row)) { JComponent renderer = ((JComponent) cellRenderer); if (renderer.getBackground() instanceof ColorUIResource && renderer.isOpaque()) { renderer.setOpaque(false); super.paintCell(g, row, rowBounds, cellRenderer, dataModel, selModel, leadIndex); renderer.setOpaque(true); return; } } super.paintCell(g, row, rowBounds, cellRenderer, dataModel, selModel, leadIndex); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.