gtklookandfeel.java
来自「java jdk 1.4的源码」· Java 代码 · 共 413 行 · 第 1/2 页
JAVA
413 行
/* * @(#)GTKLookAndFeel.java 1.55 03/05/08 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.java.swing.plaf.gtk;import java.awt.*;import java.io.File;import java.security.AccessController;import java.security.PrivilegedAction;import java.util.HashMap;import javax.swing.*;import javax.swing.plaf.*;import javax.swing.text.DefaultEditorKit;import java.io.IOException;/** * @version 1.55, 05/08/03 * @author Scott Violet */public class GTKLookAndFeel extends SynthLookAndFeel { /** * Font to use in places where there is no widget. */ private Font fallbackFont; /** * Maps a swing constant to a GTK constant. */ static int SwingOrientationConstantToGTK(int side) { switch (side) { case SwingConstants.LEFT: return GTKConstants.LEFT; case SwingConstants.RIGHT: return GTKConstants.RIGHT; case SwingConstants.TOP: return GTKConstants.TOP; case SwingConstants.BOTTOM: return GTKConstants.BOTTOM; } assert false : "Unknowning orientation: " + side; return side; } /** * Maps from a Synth state to the corresponding GTK state. * The GTK states are named differently than Synth's states, the * following gives the mapping: * <table><tr><td>Synth<td>GTK * <tr><td>SynthConstants.PRESSED<td>ACTIVE * <tr><td>SynthConstants.SELECTED<td>SELECTED * <tr><td>SynthConstants.MOUSE_OVER<td>PRELIGHT * <tr><td>SynthConstants.DISABLED<td>INACTIVE * <tr><td>SynthConstants.ENABLED<td>NORMAL * </table> * Additionally some widgets are special cased. */ static int synthStateToGTKState(Region region, int state) { int orgState = state; if ((state & SynthConstants.PRESSED) != 0) { if (region == Region.RADIO_BUTTON || region == Region.CHECK_BOX || region == Region.TOGGLE_BUTTON || region == Region.MENU || region == Region.MENU_ITEM || region == Region.RADIO_BUTTON_MENU_ITEM || region == Region.CHECK_BOX_MENU_ITEM || region == Region.SPLIT_PANE) { state = SynthConstants.MOUSE_OVER; } else { state = SynthConstants.PRESSED; } } else if ((state & SynthConstants.SELECTED) != 0) { if (region == Region.MENU) { state = SynthConstants.MOUSE_OVER; } else if (region == Region.RADIO_BUTTON || region == Region.TOGGLE_BUTTON || region == Region.RADIO_BUTTON_MENU_ITEM || region == Region.CHECK_BOX_MENU_ITEM || region == Region.CHECK_BOX || region == Region.BUTTON) { // If the button is SELECTED and is PRELIGHT we need to // make the state MOUSE_OVER otherwise we don't paint the // PRELIGHT. if ((state & SynthConstants.MOUSE_OVER) != 0) { state = SynthConstants.MOUSE_OVER; } else { state = SynthConstants.PRESSED; } } else if (region == Region.TABBED_PANE_TAB) { state = SynthConstants.ENABLED; } else { state = SynthConstants.SELECTED; } } else if ((state & SynthConstants.MOUSE_OVER) != 0) { state = SynthConstants.MOUSE_OVER; } else if ((state & SynthConstants.DISABLED) != 0) { state = SynthConstants.DISABLED; } else { if (region == Region.SLIDER_TRACK) { state = SynthConstants.PRESSED; } else if (region == Region.TABBED_PANE_TAB) { state = SynthConstants.PRESSED; } else { state = SynthConstants.ENABLED; } } return state; } static boolean isText(Region region) { // These Regions treat FOREGROUND as TEXT. return (region == Region.TEXT_FIELD || region == Region.FORMATTED_TEXT_FIELD || region == Region.LIST || region == Region.PASSWORD_FIELD || region == Region.SPINNER || region == Region.TABLE || region == Region.TEXT_AREA || region == Region.TEXT_FIELD || region == Region.TEXT_PANE || region == Region.TREE); } public UIDefaults getDefaults() { // We need to call super for basic's properties file. UIDefaults table = super.getDefaults(); table.put("FileChooserUI", "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); table.addResourceBundle( "com.sun.java.swing.plaf.gtk.resources.gtk" ); Object tempBorder = new GTKStyle.GTKLazyValue( "com.sun.java.swing.plaf.gtk.GTKPainter$ListTableFocusBorder"); table.put("List.focusCellHighlightBorder", tempBorder); table.put("Table.focusCellHighlightBorder", tempBorder); // These exist for better backward compatability with existing apps // that use these directly and don't check for null. table.put("Table.gridColor", new ColorUIResource(Color.gray)); table.put("Table.selectionForeground", new ColorUIResource(Color.BLACK)); table.put("Table.selectionBackground", new ColorUIResource(0x000080)); table.put("control", new ColorUIResource(0xC0C0C0)); if (fallbackFont != null) { table.put("TitledBorder.font", fallbackFont); } table.put("TitledBorder.titleColor", new ColorUIResource(Color.BLACK)); table.put("TitledBorder.border", new UIDefaults.ProxyLazyValue( "javax.swing.plaf.BorderUIResource", "getEtchedBorderUIResource")); return table; } /** * Creates the GTK look and feel class for the passed in Component. */ public static ComponentUI createUI(JComponent c) { String key = c.getUIClassID().intern(); if (key == "FileChooserUI") { return GTKFileChooserUI.createUI(c); } // PENDING: this is only necessary while gtk and synth are in the // same package. return SynthLookAndFeel.createUI(c); } public void initialize() { loadStylesFromThemeFiles(); } public boolean isSupportedLookAndFeel() { return true; } public boolean isNativeLookAndFeel() { return false; } public String getDescription() { return "GTK look and feel"; } public String getName() { return "GTK look and feel"; } public String getID() { return "GTK"; } private void loadStylesFromThemeFiles() { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { GTKParser parser = new GTKParser();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?