Many java applications if using swing tend to have really ugly UI's.  The fonts look terrible.  I wrote some code that can make them look a whole lot better.  This code requires jre 1.5.  Simply put this method into some type of utilities class and then call it whenever you want to make a component anti-aliased.  It will find all child components and anti-alias them as well.  You typically  just call this method from each form or dialog and all components on the form will get fixed.  I've tested this under both Windows and Linux and it works well.

Disclaimer:  I'm not a long time java developer so if you see obvious problems or could offer suggestions, please do so.

public static void AntiAliasComponent(JComponent j) {
        j.putClientProperty(com.sun.java.swing.SwingUtilities2.AA_TEXT_PROPERTY_KEY,Boolean.TRUE);
       
        int y = j.getComponentCount();
        for (int x=0;x<y;x++) {
            java.awt.Component comp = j.getComponent(x);
            if (comp instanceof JComponent) {
                AntiAliasComponent((JComponent)comp);
            }
            // Additional checks for certain types of controls.  These require special handling
            if (comp instanceof JList) {
                JList jl = (JList)comp;
                DefaultListCellRenderer d=(DefaultListCellRenderer)jl.getCellRenderer();
                d.putClientProperty(com.sun.java.swing.SwingUtilities2.AA_TEXT_PROPERTY_KEY,Boolean.TRUE);
            }
            else if (comp instanceof JComboBox) {
                JComboBox cb = (JComboBox)comp;
                BasicComboBoxRenderer d=(BasicComboBoxRenderer)cb.getRenderer();
                d.putClientProperty(com.sun.java.swing.SwingUtilities2.AA_TEXT_PROPERTY_KEY, Boolean.TRUE);
            }
            else if (comp instanceof JTable) {
                JTable tab = (JTable)comp;
                DefaultTableCellRenderer d;
                d = (DefaultTableCellRenderer)tab.getDefaultRenderer(JLabel.class);
                d.putClientProperty(com.sun.java.swing.SwingUtilities2.AA_TEXT_PROPERTY_KEY, Boolean.TRUE);
               
                // Do the headers
                d = (DefaultTableCellRenderer)tab.getTableHeader().getDefaultRenderer();
                d.putClientProperty(com.sun.java.swing.SwingUtilities2.AA_TEXT_PROPERTY_KEY, Boolean.TRUE);
            }
        }
    }


Here is a sibling function to anti-alias the menus of a form.  Simply call this for your main menu bar and it will fix all sub-menus.

public static void AntiAliasMenu(JMenuBar j)
    {
        int a = j.getMenuCount();

        for (int b=0;b<a;b++) {
            int x=j.getMenu(b).getItemCount();
            j.getMenu(b).putClientProperty(com.sun.java.swing.SwingUtilities2.AA_TEXT_PROPERTY_KEY,Boolean.TRUE);

            for (int y=0;y<x;y++) {
                JMenuItem jmi = j.getMenu(b).getItem(y);
                if (jmi!=null)
                    iii.putClientProperty(com.sun.java.swing.SwingUtilities2.AA_TEXT_PROPERTY_KEY, Boolean.TRUE);
            }
        }
    }


Enjoy.

Tom

--
Tom Welch
[EMAIL PROTECTED]
(801) 240-1609
(858) 829-4614 - Cell

------------------------------------------------------------------------------


NOTICE: This email message is for the sole use of the
intended recipient(s) and may contain confidential and
privileged information. Any unauthorized review, use,
disclosure or distribution is prohibited. If you are not the
intended recipient, please contact the sender by reply email
and destroy all copies of the original message.

------------------------------------------------------------------------------


_______________________________________________
Ldsoss mailing list
[email protected]
http://lists.ldsoss.org/mailman/listinfo/ldsoss

Reply via email to