2009-04-08 10 views
19

¿Hay alguna lista en alguna parte 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".Teclas de oscilación UIManager.getColor()

+1

Encontré una práctica aplicación Java Web Start que debería ayudar: http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/ –

Respuesta

0

Dependen de la implementación de Look and Feel. Busque en BasicLookAndFeel.java las teclas básicas. No espere que todos los PL & F se comporten de la misma manera, o que permanezcan iguales entre versiones.

6

No creo que haya un conjunto estándar definido de claves. Sin embargo, usted podría tratar este fragmento de código para enumerar los que están disponibles actualmente 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í.

+0

Actualmente (jdk1.8.0_45), para 'systemLookAndFeelClassName = com. sun.java.swing.plaf.windows.WindowsLookAndFeel', las clases no son 'java.awt.Color', sino' com.sun.java.swing.plaf.windows.DesktopProperty', pero fallan en la instancia de verificación desafortunadamente. –

4

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

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

} 
+0

En el constructor de la interfaz gráfica de usuario de NetBeans, cuando edita un color, puede elegir de una lista J con todos estos enumerados (sin los valores de color reales). De hecho, de ahí surgió la idea de que podría ser posible enumerarlos. Una mesa es mucho más agradable, sin embargo. –

Cuestiones relacionadas