2009-04-08 10 views
19

Gibt es irgendwo eine Liste der UIManager.getColor() Tasten für Swing? Ich kann es anscheinend nicht online finden, nur gelegentliche Verweise auf Strings wie "Panel.background" und "Table.selectionBackground".Swing UIManager.getColor() Tasten

+1

Ich fand eine handliche Java Web Start App, die helfen sollte: http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/ –

Antwort

0

Sie sind eine Art Look & Feel Implementierung abhängig. Suchen Sie in BasicLookAndFeel.java nach den Grundschlüsseln. Erwarten Sie nicht, dass sich alle PL & F gleich verhalten oder zwischen den Versionen gleich bleiben.

6

Ich glaube nicht, dass es einen definierten Standardsatz von Schlüsseln gibt. Aber man könnte dieses Stück Code versuchen, diejenigen, die jetzt in alphabetischer Reihenfolge aufzulisten:

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

Dies erzeugt eine Liste zu lange hier zu reproduzieren.

+0

Derzeit (jdk1.8.0_45), für 'systemLookAndFeelClassName = com. sun.java.swing.plaf.windows.WindowsLookAndFeel', die Klassen sind nicht 'java.awt.Color', sondern' com.sun.java.swing.plaf.windows.DesktopProperty', wobei die instanceof-Prüfung leider fehlschlägt. –

4

@mmyers hat mich inspiriert. Hier ist ein kurzes Programm, um die UIManager-Standardwerte in einer sortierbaren Tabelle aufzulisten.

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

Wenn Sie im NetBeans-GUI-Builder eine Farbe bearbeiten, können Sie aus einer JListe auswählen, in der alle aufgeführten Elemente aufgeführt sind (ohne die tatsächlichen Farbwerte). Das ist der Punkt, an dem ich die Idee hatte, dass es möglich sein könnte, sie aufzulisten. Ein Tisch ist jedoch viel schöner. –