views:

412

answers:

3

I want to over ride java look and feel. I just want to show the buttons differently.
I want all the features of Windows Look and Feel but only buttons differently. I hope you get my point.

Color color = new Color(220, 220, 220, 200);
        UIManager.put("OptionPane.background", color);
        UIManager.put("Panel.background", color);
        UIManager.put("Button.foreground", new Color(255, 255, 255, 255));      
        List<Object> gradients = new ArrayList<Object>(5);
        gradients.add(0.00f);
        gradients.add(0.00f);
        gradients.add(new Color(0xC1C1C1));
        gradients.add(new Color(0xFFFFFF));
        gradients.add(new Color(0x5C5D5C));
        UIManager.put("Button.gradient", gradients);
        UIManager.put("Button.highlight",Color.RED);            

        UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel);

ALSO TELL ME How to make JtabbedPane in Round shape???

+2  A: 

Well, if you update LnF informations before to apply the Windows LnF, you have no chances to have them taken in account :-)

I suggest you reverse your code by first loading Windows LnF, then only updating buttons look. But beware, by doing so, you'll change the look of all buttons, not only yours.

Riduidel
It does not have any effect sir but If I remove loading LnF then it works fine
Aizaz
Maybe is it due to the fact that Windows LnF may not use those properties ...
Riduidel
It surely uses these properties because when you apply LnF then these components shows differently
Aizaz
A: 

Custom GUI Class put

package com.ibm.gui;
/**
*Auhor Aizaz
**/

import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class AizCustomGUI extends BasicTabbedPaneUI {

    private static final Insets NO_INSETS = new Insets(0, 0, 0, 0);
    private ColorSet selectedColorSet;
    private ColorSet defaultColorSet;
    private ColorSet hoverColorSet;
    private boolean contentTopBorderDrawn = true;
    private Color lineColor = new Color(158, 158, 158);
    private Color dividerColor = new Color(200, 200, 200);
    private Insets contentInsets = new Insets(10, 10, 10, 10);
    private int lastRollOverTab = -1;

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

    public AizCustomGUI() {

        selectedColorSet = new ColorSet();


        selectedColorSet.topGradColor1 = new Color(198, 198, 197);
        selectedColorSet.topGradColor2 = Color.WHITE;




        selectedColorSet.bottomGradColor1 = Color.WHITE;
        selectedColorSet.bottomGradColor2 = Color.WHITE;

        defaultColorSet = new ColorSet();


        defaultColorSet.topGradColor1 = Color.WHITE;
        defaultColorSet.topGradColor2 = Color.WHITE;

        defaultColorSet.bottomGradColor1 = Color.WHITE;
        defaultColorSet.bottomGradColor2 = new Color(198, 198, 197);


        hoverColorSet = new ColorSet();
        hoverColorSet.topGradColor1 = new Color(244, 244, 244);
        hoverColorSet.topGradColor2 = new Color(223, 223, 223);

        hoverColorSet.bottomGradColor1 = new Color(211, 211, 211);
        hoverColorSet.bottomGradColor2 = new Color(235, 235, 235);

        maxTabHeight = 20;

        setContentInsets(0);
    }

    public void setContentTopBorderDrawn(boolean b) {
        contentTopBorderDrawn = b;
    }

    public void setContentInsets(Insets i) {
        contentInsets = i;
    }

    public void setContentInsets(int i) {
        contentInsets = new Insets(i, i, i, i);
    }

    public int getTabRunCount(JTabbedPane pane) {
        return 1;
    }

    @Override
    protected void installDefaults() {
        super.installDefaults();

        RollOverListener l = new RollOverListener();
        tabPane.addMouseListener(l);
        tabPane.addMouseMotionListener(l);

        tabAreaInsets = NO_INSETS;
        tabInsets = new Insets(0, 0, 0, 0);
    }

    protected boolean scrollableTabLayoutEnabled() {
        return false;
    }

    @Override
    protected Insets getContentBorderInsets(int tabPlacement) {
        return contentInsets;
    }

    @Override
    protected int calculateTabHeight(int tabPlacement, int tabIndex,
            int fontHeight) {
        return super.calculateTabHeight(tabPlacement, tabIndex, fontHeight);
        //  return 21;
    }

    @Override
    protected int calculateTabWidth(int tabPlacement, int tabIndex,
            FontMetrics metrics) {
        int w = super.calculateTabWidth(tabPlacement, tabIndex, metrics);
        int wid = metrics.charWidth('M');
        w += wid * 2;
        return w;
    }

    @Override
    protected int calculateMaxTabHeight(int tabPlacement) {
        return super.calculateMaxTabHeight(tabPlacement);
        //return 21;
    }

    @Override
    protected void paintTabArea(Graphics g, int tabPlacement, int selectedIndex) {

        g.setColor(Color.WHITE);

        g.fillRoundRect(0, 0, tabPane.getWidth(), tabPane.getHeight(), 10, 10);
        super.paintTabArea(g, tabPlacement, selectedIndex);
    }

    @Override
    protected void paintTabBackground(Graphics g, int tabPlacement,
            int tabIndex, int x, int y, int w, int h, boolean isSelected) {
        Graphics2D g2d = (Graphics2D) g;
        ColorSet colorSet;

        Rectangle rect = rects[tabIndex];     

        if (isSelected) {
            colorSet = selectedColorSet;
        } else if (getRolloverTab() == tabIndex) {
            //colorSet = hoverColorSet;
            colorSet = selectedColorSet;
        } else {
            colorSet = defaultColorSet;
        }

        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);

        int width = rect.width;
        int xpos = rect.x;
        if (tabIndex > 0) {
            width--;
            xpos++;
        }

        g2d.setPaint(new GradientPaint(xpos, 0, colorSet.topGradColor1, xpos,
                10, colorSet.topGradColor2));

        g2d.fillRoundRect(xpos, 0, width, 10, 10, 10);

        g2d.setPaint(new GradientPaint(0, 10, colorSet.bottomGradColor1, 0, 21,
                colorSet.bottomGradColor2));

        g2d.fillRoundRect(xpos, 10, width, 11, 10, 10);

        if (contentTopBorderDrawn) {
            g2d.setColor(lineColor);
            g2d.drawLine(rect.x, 20, rect.x + rect.width - 1, 20);
        }
    }

    @Override
    protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex,
            int x, int y, int w, int h, boolean isSelected) {

        g.setColor(dividerColor);


        g.drawRoundRect(x, y, w, tabPane.getHeight(), 10, 10);



    }

    @Override
    protected void paintContentBorderTopEdge(Graphics g, int tabPlacement,
            int selectedIndex, int x, int y, int w, int h) {
    }

    @Override
    protected void paintContentBorderRightEdge(Graphics g, int tabPlacement,
            int selectedIndex, int x, int y, int w, int h) {
        // Do nothing
    }

    @Override
    protected void paintContentBorderLeftEdge(Graphics g, int tabPlacement,
            int selectedIndex, int x, int y, int w, int h) {
        // Do nothing
    }

    @Override
    protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement,
            int selectedIndex, int x, int y, int w, int h) {
        // Do nothing
    }

    @Override
    protected void paintFocusIndicator(Graphics g, int tabPlacement,
            Rectangle[] rects, int tabIndex, Rectangle iconRect,
            Rectangle textRect, boolean isSelected) {
        // Do nothing
    }

    @Override
    protected int getTabLabelShiftY(int tabPlacement, int tabIndex,
            boolean isSelected) {
        return 0;
    }

    private class ColorSet {

        Color topGradColor1;
        Color topGradColor2;
        Color bottomGradColor1;
        Color bottomGradColor2;
    }

    private class RollOverListener implements MouseMotionListener,
            MouseListener {

        public void mouseDragged(MouseEvent e) {
        }

        public void mouseMoved(MouseEvent e) {
            checkRollOver();
        }

        public void mouseClicked(MouseEvent e) {
        }

        public void mousePressed(MouseEvent e) {
        }

        public void mouseReleased(MouseEvent e) {
        }

        public void mouseEntered(MouseEvent e) {
            checkRollOver();
        }

        public void mouseExited(MouseEvent e) {
            tabPane.repaint();
        }

        private void checkRollOver() {
            int currentRollOver = getRolloverTab();
            if (currentRollOver != lastRollOverTab) {
                lastRollOverTab = currentRollOver;

                Rectangle tabsRect = new Rectangle(0, 0, tabPane.getWidth(), tabPane.getHeight());
                tabPane.repaint(tabsRect);

            }
        }
    }
}

Call you custom GUI Class

import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;

public class TestPSTabbedPaneUI
{
    public static void main(String[] args)
    {
        try
        {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        }
        catch (Exception exc)
        {
            exc.printStackTrace();
        }

        JFrame vFrame = new JFrame();
        vFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        vFrame.setSize(200, 200);
        JTabbedPane vTab = new JTabbedPane();
                vTab.setUI(new AizCustomGUI() );

        vTab.add("One", new JPanel());

        JPanel vPanel2 = new JPanel();
        vPanel2.setBorder(BorderFactory.createLineBorder(Color.BLACK,2));
        vTab.add("Two", vPanel2);

        vTab.add("Three", new JButton("three"));

        vFrame.getContentPane().add(vTab);
        vFrame.setTitle("Tabs Example");
        vFrame.show();
    }
}
Aizaz
A: 

You can always subclass WindowsLookAndFeel, and override the initialize(), initClassDefaults(), initComponentDefaults() and initSystemColorDefaults() to do as you see fit.

perp