Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
覆盖默认的Java外观_Java_Swing_Overriding_Look And Feel_Jtabbedpane - Fatal编程技术网

覆盖默认的Java外观

覆盖默认的Java外观,java,swing,overriding,look-and-feel,jtabbedpane,Java,Swing,Overriding,Look And Feel,Jtabbedpane,我想覆盖java的外观。我只想以不同的方式显示按钮。 我想要Windows的所有功能的外观和感觉,但只是按钮不同。我希望你明白我的意思 Color color = new Color(220, 220, 220, 200); UIManager.put("OptionPane.background", color); UIManager.put("Panel.background", color); UIManager.put("Button.fo

我想覆盖java的外观。我只想以不同的方式显示按钮。
我想要Windows的所有功能的外观和感觉,但只是按钮不同。我希望你明白我的意思

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);
Color Color=新颜色(220、220、220、200);
UIManager.put(“OptionPane.background”,颜色);
UIManager.put(“面板.背景”,颜色);
UIManager.put(“按钮.前景”,新颜色(255,255,255,255));
列表渐变=新阵列列表(5);
梯度。加上(0.00f);
梯度。加上(0.00f);
添加(新颜色(0xC1C1));
添加(新颜色(0xFFFFFF));
渐变。添加(新颜色(0x5C5D5C));
UIManager.put(“按钮.渐变”,渐变);
UIManager.put(“按钮.突出显示”,颜色.红色);
setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel);
也告诉我
如何使JtabbedPane成为圆形???

好吧,如果在应用Windows LnF之前更新LnF信息,您就没有机会考虑它们:-)

我建议您通过首先加载Windows LnF,然后只更新按钮外观来反转代码。
但是要注意,这样做会改变所有按钮的外观,而不仅仅是您的按钮。

自定义GUI类put

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

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);

            }
        }
    }
}
调用自定义GUI类

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();
    }
}

您始终可以将WindowsLookAndFeel子类化,并重写initialize()、initClassDefaults()、initComponentDefaults()和initSystemColorDefaults()按照您认为合适的方式操作。

这没有任何效果,先生,但是如果我删除加载LnF,那么它会正常工作。它肯定会使用这些属性,因为当您应用LnF时,这些组件的显示方式会有所不同