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); } } } }
还有一个问题,JList中如何加入分隔线,类似menu中的addSeparator()的作用?
方法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); } }
方法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());
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);
}
}
}
}
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);
}
}
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);
}
}
果然是高手,谢谢解答,另外有两个问题高分求教,会另开新贴.