【问题标题】:JTextArea font from JComboBoxJComboBox 中的 JTextArea 字体
【发布时间】:2023-03-05 20:37:01
【问题描述】:

几天前我制作了自己的文本编辑器,但我遇到了字体问题。我用于制作文本编辑器的组件是 JTextArea 。所以我想做的是向用户显示一个对话框,其中包含 3 个 JComboBoxes 这将是大小、字体和样式(粗体、斜体、下划线)和一个按钮。做出所需的选择后,用户将单击按钮并应用字体。

这是我的代码。 .setFont()方法的正确使用方法是什么?

final JTextArea area = new JTextArea(5,10);

final JComboBox font = new JComboBox();
font.addItem("Arial");
font.addItem("Calibri");
font.addItem("Garamond");
font.addItem("Jokerman");
font.addItem("MV Boli");// and many more

final JComboBox size = new JComboBox();
size.addItem("8");
size.addItem("12");
size.addItem("16");
size.addItem("18");
size.addItem("24");// and many more

final JComboBox style = new JComboBox();
font.addItem("bold);
font.addItem("itaic");
font.addItem("underlined");

JButton button = new JButton("Done");
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
area.setFont(new Font(font.getSelectedItem(),style.getSelectedItem(),size.getSelectedItem()));
}
});

【问题讨论】:

    标签: java swing fonts


    【解决方案1】:

    在做出所需的选择后,用户将单击按钮并应用字体。

    这是我的代码。 .setFont() 方法的正确使用方法是什么?

         

    例如

    import java.awt.*;
    import java.awt.event.*;
    import java.io.IOException;
    import java.util.Locale;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.*;
    import javax.swing.plaf.FontUIResource;
    import javax.swing.plaf.basic.BasicComboBoxRenderer;
    
    public class SystemFontDisplayer extends JFrame {
    
        private static final long serialVersionUID = 1L;
        private JFrame frame = new JFrame("Nimbus UIDeafaults and Font");
        private JComboBox fontsBox;
        private javax.swing.Timer timer = null;
        private JButton testButton = new JButton("testButton");
        private JTextField testTextField = new JTextField("testTextField");
        private JLabel testLabel = new JLabel("testLabel");
        private Font font1, font2;
        private JMenuBar menuBar1 = new JMenuBar();
        private JMenu menu1 = new JMenu("Menu 1");
        private JMenu menu2 = new JMenu("Menu 2");
        private JMenuItem menuItem1 = new JMenuItem("MenuItem 1");
        private JMenuItem menuItem2 = new JMenuItem("MenuItem 2");
    
        public SystemFontDisplayer() {
            try {
                font1 = Font.createFont(Font.TRUETYPE_FONT, SystemFontDisplayer.class.getResourceAsStream("/Images/SourceSansPro-Regular.ttf"));
                font2 = Font.createFont(Font.TRUETYPE_FONT, SystemFontDisplayer.class.getResourceAsStream("/Images/SourceSansPro-Regular.otf"));
            } catch (FontFormatException ex) {
                Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(SystemFontDisplayer.class.getName()).log(Level.SEVERE, null, ex);
            }
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            ge.registerFont(font1);
            //ge.registerFont(font2);
            String[] fontFamilyNames = ge.getAvailableFontFamilyNames(Locale.getDefault());
            fontsBox = new JComboBox(fontFamilyNames);
            fontsBox.setSelectedItem(0);
            fontsBox.setRenderer(new ComboRenderer());
            fontsBox.addItemListener(new ItemListener() {
                @Override
                public void itemStateChanged(ItemEvent e) {
                    if (e.getStateChange() == ItemEvent.SELECTED) {
                        final String fontName = fontsBox.getSelectedItem().toString();
                        fontsBox.setFont(new Font(fontName, Font.PLAIN, 16));
                        start();
                    }
                }
            });
            fontsBox.setSelectedItem(0);
            fontsBox.getEditor().selectAll();
            menu1.add(menuItem1);
            menuBar1.add(menu1);
            menu2.add(menuItem2);
            menuBar1.add(menu2);
            frame.setJMenuBar(menuBar1);
            frame.setLayout(new GridLayout(4, 0, 20, 20));
            frame.add(fontsBox);
            frame.add(testButton);
            frame.add(testTextField);
            frame.add(testLabel);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocation(200, 105);
            frame.pack();
            java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    fontsBox.setPopupVisible(true);
                    fontsBox.setPopupVisible(false);
                }
            });
            frame.setVisible(true);
        }
    
        private void start() {
            timer = new javax.swing.Timer(750, updateCol());
            timer.setRepeats(false);
            timer.start();
        }
    
        public Action updateCol() {
            return new AbstractAction("text load action") {
                private static final long serialVersionUID = 1L;
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    final Font fnt = new Font(fontsBox.getSelectedItem().toString(), Font.PLAIN, 12);
                    final FontUIResource res = new FontUIResource(fnt);
                    UIManager.getLookAndFeelDefaults().put("Button.font", res);
                    UIManager.getLookAndFeelDefaults().put("TextField.font", res);
                    UIManager.getLookAndFeelDefaults().put("Label.font", res);
                    SwingUtilities.updateComponentTreeUI(frame);
                    frame.pack();
                }
            };
        }
    
        public static void main(String arg[]) {
            /*try {
             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
             UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
             UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
             } catch (Exception e) {
             e.printStackTrace();
             }*/
            java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    SystemFontDisplayer systemFontDisplayer = new SystemFontDisplayer();
                }
            });
        }
    
        private class ComboRenderer extends BasicComboBoxRenderer {
    
            private static final long serialVersionUID = 1L;
    
            @Override
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                final Object fntObj = value;
                final String fontFamilyName = (String) fntObj;
                setFont(new Font(fontFamilyName, Font.PLAIN, 16));
                return this;
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-03
    • 2021-05-17
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    相关资源
    最近更新 更多