gpt4 book ai didi

java - JComboBox 中的 JTextArea 字体

转载 作者:行者123 更新时间:2023-12-01 17:21:06 25 4
gpt4 key购买 nike

几天前我制作了自己的文本编辑器,但在字体方面遇到了问题。我用来制作文本编辑器的组件是 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()));
}
});

最佳答案

After making the desired choices, the user will click on the button and the font will be applied.

Here is my code. What is the correct way to use the .setFont() method?

enter image description here enter image description here

例如

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;
}
}
}

关于java - JComboBox 中的 JTextArea 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18717299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com