有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java字体在JComboBox中呈现不正确

我正在尝试制作一个JComboBox,它显示Java中所有可用的字体,并以各自的字体显示这些字体的名称。这个列表似乎在大部分情况下都有效,但有相当多的字体要么呈现为巨大的空白,要么所有字母堆叠在一起:

http://i.stack.imgur.com/cIbCh.png

这是我的代码中的问题,还是OS/Java(Windows 8、JDK 1.7.055)的问题

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.*;

public class TextEditor extends JFrame{

    private static JPanel j;
    private static String[] fontNames =     GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
    public TextEditor(){
        setSize(500, 500);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setContentPane(j);
        setDefaultLookAndFeelDecorated(true);
        setTitle("Text Editor");
        setVisible(true);
    }

    public static void main(String[] args) throws FileNotFoundException {
        initComponents("Sampe Text");
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                TextEditor edit = new TextEditor();
            }
        });
    }

    public static void initComponents(String s){
        j = new JPanel();
        j.setLayout(new BorderLayout());

        final JComboBox<String> fonts = new JComboBox<String>(fontNames);
        fonts.setRenderer(new ListRenderer());
        fonts.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                final String font = fonts.getSelectedItem().toString();
                fonts.setFont(new Font(font, Font.PLAIN, 16));
            }
        });
        fonts.setPrototypeDisplayValue("XXXXXXXXXXXXXX");

        j.add(fonts, BorderLayout.NORTH);
    }

    private static class ListRenderer extends DefaultListCellRenderer {
        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

            String selectedIndex = (String) value;
            setFont(new Font(selectedIndex, Font.PLAIN, 16));
            setText(selectedIndex);
            return this;
        }
    }
}

共 (0) 个答案