java swing colors uimanager

java - Swing UIManager.getColor() teclas



colors (5)

¿Hay una lista en algún lugar de las claves UIManager.getColor() para Swing? Parece que no puedo encontrarlo en línea, solo referencias ocasionales a cadenas como "Panel.background" y "Table.selectionBackground" .


@mmyers me inspiró. Aquí hay un programa corto para enumerar los valores predeterminados de UIManager en una tabla clasificable.

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<Object,Object> 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<UIEntry> tableModel = (EventTableModel<UIEntry>) 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<UIEntry> uiEntryList = GlazedLists.threadSafeList(new BasicEventList<UIEntry>()); for (Map.Entry<Object,Object> key : UIManager.getDefaults().entrySet()) { uiEntryList.add(new UIEntry(key)); } final SortedList<UIEntry> sortedUIEntryList = new SortedList<UIEntry>(uiEntryList, null); // build a JTable String[] propertyNames = new String[] {"key","value","className"}; String[] columnLabels = new String[] {"Key", "Value", "Class"}; TableFormat<UIEntry> tf = GlazedLists.tableFormat(UIEntry.class, propertyNames, columnLabels); EventTableModel<UIEntry> etm = new EventTableModel<UIEntry>(sortedUIEntryList, tf); JTable t = new JTable(etm); TableComparatorChooser<UIEntry> 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); } }



Este programa es el mejor que he visto para visualizar los valores de UIManager (por ejemplo, fuentes, colores, bordes): tips4java.wordpress.com/2008/10/09/uimanager-defaults

Carece de búsqueda, pero puede filtrar por componente o tipo de valor, lo cual es bastante bueno.


No creo que haya un conjunto estándar definido de claves. Pero puede probar este bit de código para enumerar los que están actualmente disponibles en orden alfabético:

List<String> colors = new ArrayList<String>(); for (Map.Entry<Object, Object> 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);

Esto produce una lista demasiado larga para reproducir aquí.


Son un tipo de implementación de Look and Feel. Busque en BasicLookAndFeel.java las claves básicas. No espere que todos los PL&F se comporten igual, o incluso que sigan igual entre las versiones.