覆盖默认外观Java

我想覆盖java的外观。 我只是想以不同的方式显示按钮。
我想要Windows外观的所有function,但只有不同的按钮。 我希望你明白我的观点。

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 gradients = new ArrayList(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); 

也告诉我如何使圆形的JtabbedPane ???

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

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

自定义GUI类放

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

您始终可以inheritanceWindowsLookAndFeel,并覆盖initialize(),initClassDefaults(),initComponentDefaults()和initSystemColorDefaults()以根据需要执行操作。