Java Swing 弹出字体选择

Java Swing Popup Font Selection

我想设计一个动作侦听器,它将创建一个弹出窗口 window,其中包含一个包含所有系统字体的组合框。更具体地说,我想设计一个字体选择选项,就像使用 Java swing 的文本编辑器一样。

我该怎么做?

您应该会得到一个可用的系统字体列表。将该列表放入 JComboBox 并向该 JComboBox 添加侦听器。

使用此代码获取系统字体

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = e.getAllFonts();

要使用弹出窗口为用户显示 JComboBox,请使用 JOptionPane。请参阅此教程 https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#input

基于我发布的三个链接的示例(这就是为什么这个答案是一个社区维基,所以我无法从中获得声誉):

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Example {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Example();
            }
        });

    }

    public Example() {

        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] array = ge.getAvailableFontFamilyNames();
        JComboBox<String> box = new JComboBox<String>(array);
        box.setEditable(true);

        JFrame frame = new JFrame();

        JButton button = new JButton("Button");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame, box, "...", JOptionPane.QUESTION_MESSAGE);
                System.out.println(box.getSelectedItem());
            }
        });

        frame.getContentPane().add(button);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

}