Swing UIManager.getColor()键

是否有一个用于Swing的UIManager.getColor()键的列表? 我似乎无法在网上找到它,只是偶尔引用字符串,如"Panel.background""Table.selectionBackground" "Panel.background" "Table.selectionBackground"

我正在寻找相同的东西,并在http://nadeausoftware.com/node/85上找到了这个页面以及所有这些属性的绝佳概述。

我认为没有定义的标准密钥集。 但您可以尝试使用这段代码按字母顺序列出当前可用的代码:

 List colors = new ArrayList(); for (Map.Entry entry : UIManager.getDefaults().entrySet()) { if (entry.getValue() instanceof Color) { colors.add((String) entry.getKey()); // all the keys are strings } } Collections.sort(colors); for (String name : colors) System.out.println(name); 

这会产生一个列表太长而无法在此重现。

@mmyers给了我灵感。 这是一个简短的程序,用于列出可排序表中的UIManager默认值。

 package com.example.test.gui; import java.awt.Color; import java.awt.Component; import java.util.Map; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.table.DefaultTableCellRenderer; import ca.odell.glazedlists.BasicEventList; import ca.odell.glazedlists.EventList; import ca.odell.glazedlists.GlazedLists; import ca.odell.glazedlists.SortedList; import ca.odell.glazedlists.gui.AbstractTableComparatorChooser; import ca.odell.glazedlists.gui.TableFormat; import ca.odell.glazedlists.swing.EventTableModel; import ca.odell.glazedlists.swing.TableComparatorChooser; public class UIManagerDefaultsViewer { public static class UIEntry { final private String key; final private Object value; UIEntry(Map.Entry e) { this.key = e.getKey().toString(); this.value = e.getValue(); } public String getKey() { return key; } public Object getValue() { return value; } public Class getValueClass() { if (value == null) return null; // ?!?!?! return value.getClass(); } public String getClassName() { // doesn't handle arrays properly if (value == null) return ""; return value.getClass().getName(); } } public static class UIEntryRenderer extends DefaultTableCellRenderer { Color[] defaults = new Color[4]; public UIEntryRenderer() { super(); defaults[0] = UIManager.getColor("Table.background"); defaults[1] = UIManager.getColor("Table.selectionBackground"); defaults[2] = UIManager.getColor("Table.foreground"); defaults[3] = UIManager.getColor("Table.selectionForeground"); } public void setDefaultColors(Component cell, boolean isSelected) { cell.setBackground(defaults[isSelected ? 1 : 0]); cell.setForeground(defaults[isSelected ? 3 : 2]); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (table.convertColumnIndexToModel(column) == 1) // the value column { final EventTableModel tableModel = (EventTableModel) table.getModel(); UIEntry e = tableModel.getElementAt(row); JLabel l = (JLabel)cell; if (value instanceof Color) { Color c = (Color)value; cell.setBackground(c); cell.setForeground( c.getRed()+c.getGreen()+c.getBlue() >= 128*3 ? Color.black : Color.white); // choose either black or white depending on brightness l.setText(String.format("Color 0x%08x (%d,%d,%d alpha=%d)", c.getRGB(), c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha())); return cell; } else if (e.getKey().endsWith("ont")) // possible font, not always ".font" { // fonts are weird, for some reason the value returned // in the entry set of UIManager.getDefaults() // is not the same type as the value "v" below Object v = UIManager.get(e.getKey()); if (v instanceof javax.swing.plaf.FontUIResource) { javax.swing.plaf.FontUIResource font = (javax.swing.plaf.FontUIResource)v; l.setText("Font "+font.getFontName()+" "+font.getSize()); } } } setDefaultColors(cell, isSelected); return cell; } } public static void main(String[] args) { final EventList uiEntryList = GlazedLists.threadSafeList(new BasicEventList()); for (Map.Entry key : UIManager.getDefaults().entrySet()) { uiEntryList.add(new UIEntry(key)); } final SortedList sortedUIEntryList = new SortedList(uiEntryList, null); // build a JTable String[] propertyNames = new String[] {"key","value","className"}; String[] columnLabels = new String[] {"Key", "Value", "Class"}; TableFormat tf = GlazedLists.tableFormat(UIEntry.class, propertyNames, columnLabels); EventTableModel etm = new EventTableModel(sortedUIEntryList, tf); JTable t = new JTable(etm); TableComparatorChooser tcc = TableComparatorChooser.install(t, sortedUIEntryList, AbstractTableComparatorChooser.SINGLE_COLUMN, tf); sortedUIEntryList.setComparator(tcc.getComparatorsForColumn(0).get(0)); // default to sort by the key t.setDefaultRenderer(Object.class, new UIEntryRenderer()); JFrame f = new JFrame("UI Manager Defaults Viewer"); // show the frame f.add(new JScrollPane(t)); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } } 

这个程序是我见过的最好的可视化UIManager值(例如字体,颜色,边框): http : //tips4java.wordpress.com/2008/10/09/uimanager-defaults/

它缺少搜索,但它可以按组件或值类型进行过滤,这非常好。

它们依赖于外观和外观。 在BasicLookAndFeel.java查找基本键。 不要指望所有PL&F的行为都相同,甚至在版本之间保持不变。