java - Swing 未显示正确的字体集

标签 java swing fonts jlist

我有一个JList JScrollPane 里面并将字体设置为 Tahoma ,普通,20,由于某种原因它仍然显示为非常小的文本,我不确定这是为什么?

为了这不是一段庞大的代码,我已经尽可能地精简了它 存储它的框架使用 GridBagLayout

ArrayUtil.ArrayToListModel转换任何List<T>;ListMode<T>;

JFrame frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
GridBagLayout gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = new int[]{0};
gridBagLayout.rowHeights = new int[]{0};
gridBagLayout.columnWeights = new double[]{1.0};
gridBagLayout.rowWeights = new double[]{1.0};
frame.getContentPane().setLayout(gridBagLayout);

JScrollPane showlistScrollPane = new JScrollPane();
GridBagConstraints gbc_showlistScrollPane = new GridBagConstraints();
gbc_showlistScrollPane.insets = new Insets(0, 0, 0, 5);
gbc_showlistScrollPane.fill = GridBagConstraints.BOTH;
gbc_showlistScrollPane.gridx = 0;
gbc_showlistScrollPane.gridy = 0;
frame.getContentPane().add(showlistScrollPane, gbc_showlistScrollPane);

ArrayList<String> randomData = new ArrayList<String>();
randomData.add("Random drhgiudrhgiudhri");
randomData.add("Data dsirhgodhroih");
ListModel<String> pagesList = ArrayUtil.ArrayToListModel(randomData);

showlist = new JList<String>(pagesList);
showlist.setFont(new Font("Tahoma", Font.PLAIN, 20));
showlistScrollPane.setViewportView(showlist);

无论我为showlist制作字体有多大或多小它永远不会改变默认值。

最佳答案

JList 中显示内容的方式不是由 JList 定义的但由 ListCellRenderer 定义分配给JList ,所以

showlist.setFont(new Font("Tahoma", Font.PLAIN, 20));

JList内显示的内容没有影响

看看Writing a Custom Cell Renderer了解更多详情

举个例子...

List of happy things

import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test1 {

    public static void main(String[] args) {
        new Test1();
    }

    public Test1() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JList list = new JList(new String[]{"Happy list", "of happy things", "bunnies", "unicorns", "sharks"});
                list.setCellRenderer(new BigFontListCellRenderer());

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(list));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class BigFontListCellRenderer extends DefaultListCellRenderer {

        @Override
        public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            setFont(new Font("Tahoma", Font.PLAIN, 20));
            return this;
        }

    }

}

关于java - Swing 未显示正确的字体集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656452/

相关文章:

ios - 设置自定义 UILabel

java - 是否可以从preparedStatement获取完整的请求?

java - 重新初始化组件时,我的事件监听器停止工作

java - 具有自定义算法的 Keytool

java - 正则表达式: the string must contains sequence of words

java - JMF使用javax.imageio问题

java - 如何根据先前选择的 JButton 更改 JPanel 的内容?

java - 禁用多个日期范围 jDateChooser

flash - Flash 中的多种字体/语言支持

css - @font-face 字体不工作