默认的字体是粗体的,使用chooser.setFont(FONT_FORMATTER)后还是没有什么变化,有什么办法吗?

解决方案 »

  1.   

    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Font;import javax.swing.JFileChooser;public class T
    {
    public static void main(String[] args)
    {
    JFileChooser jfc = new JFileChooser();
    updateFont(jfc, new Font("Dialog", Font.PLAIN, 12));
    jfc.showOpenDialog(null);
    }

    private static void updateFont(Component comp, Font font)
    {
    comp.setFont(font);
    if (comp instanceof Container) {
    Container c = (Container) comp;
    int n = c.getComponentCount();
    for (int i = 0; i < n; i++) {
    updateFont(c.getComponent(i), font);
    }
    }
    }
    }
      

  2.   

    还有一个问题,JList中如何加入分隔线,类似menu中的addSeparator()的作用?
      

  3.   

    方法1import java.awt.BorderLayout;
    import java.awt.Component;import javax.swing.*;public class ListSeparatorTest
    {
    public static final Object SEP = new Object(); public static class SeparatorRenderer extends DefaultListCellRenderer
    {
    private JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);

    public Component getListCellRendererComponent(
    JList list, Object value, int index, boolean isSelected,
    boolean cellHasFocus)
    {
    if (value == SEP) {
    return separator;
    }
    else {
    return super.getListCellRendererComponent(
    list, value, index, isSelected, cellHasFocus);
    }
    }
    } public static void main(String[] args)
    {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
    } DefaultListModel model = new DefaultListModel();
    model.addElement("Item-1");
    model.addElement("Item-2");
    model.addElement(SEP);
    model.addElement("Item-3");
    model.addElement("Item-4");
    model.addElement(SEP);
    model.addElement("Item-5");
    model.addElement("Item-6");
    model.addElement(SEP);
    model.addElement("Item-7");
    model.addElement("Item-8");
    JList list = new JList(model);
    list.setCellRenderer(new SeparatorRenderer());

    JScrollPane sp = new JScrollPane(list);
    JFrame f = new JFrame();
    f.getContentPane().add(sp, BorderLayout.CENTER);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }
      

  4.   

    方法2import java.awt.BorderLayout;
    import java.awt.Component;
    import java.util.HashSet;import javax.swing.*;public class ListSeparatorTest2 extends JList
    {
    public HashSet separatorIndexSet = new HashSet();

    public ListSeparatorTest2()
    {
    setCellRenderer(new SeparatorRenderer());
    }
    public ListSeparatorTest2(DefaultListModel model)
    {
    super(model);
    setCellRenderer(new SeparatorRenderer());
    } public void addSeparator(int index)
    {
    separatorIndexSet.add(new Integer(index));
    repaint();
    }

    public void removeSeparator(int index)
    {
    separatorIndexSet.remove(new Integer(index));
    repaint();
    }

    private class SeparatorRenderer extends JPanel implements ListCellRenderer
    {
    private DefaultListCellRenderer defRenderer = new DefaultListCellRenderer();
    private JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);

    public SeparatorRenderer() 
    {
    super(new BorderLayout());

    add(separator, BorderLayout.NORTH);
    add(defRenderer, BorderLayout.CENTER);
    }

    public Component getListCellRendererComponent(
    JList list, Object value, int index, boolean isSelected,
    boolean cellHasFocus)
    {
    defRenderer.getListCellRendererComponent(
    list, value, index, isSelected, cellHasFocus);
    separator.setVisible(separatorIndexSet.contains(new Integer(index)));
    return this;
    }
    } public static void main(String[] args)
    {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
    } DefaultListModel model = new DefaultListModel();
    model.addElement("Item-1");
    model.addElement("Item-2");
    model.addElement("Item-3");
    model.addElement("Item-4");
    model.addElement("Item-5");
    model.addElement("Item-6");
    model.addElement("Item-7");
    model.addElement("Item-8");
    ListSeparatorTest2 list = new ListSeparatorTest2(model);
    list.addSeparator(2);
    list.addSeparator(4);
    list.addSeparator(6);

    JScrollPane sp = new JScrollPane(list);
    JFrame f = new JFrame();
    f.getContentPane().add(sp, BorderLayout.CENTER);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }
      

  5.   

    to gtlang78():
    果然是高手,谢谢解答,另外有两个问题高分求教,会另开新贴.