在Java swing应用程序中更改字体样式、大小
我正在用JavaSwing编写一个电子邮件应用程序。我希望用户能够在写电子邮件时更改字体,但我不知道如何做到这一点。 我创建了一个包含所有字体的JComboBox 我想我应该使用在Java swing应用程序中更改字体样式、大小,java,swing,jcombobox,Java,Swing,Jcombobox,我正在用JavaSwing编写一个电子邮件应用程序。我希望用户能够在写电子邮件时更改字体,但我不知道如何做到这一点。 我创建了一个包含所有字体的JComboBox 我想我应该使用getSelectedItem()so并向JComboBox添加一个actionListener来将此信息传递到JTextArea?或者还有其他方法? 这是我的密码: String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailab
getSelectedItem()
so并向JComboBox添加一个actionListener来将此信息传递到JTextArea?或者还有其他方法?
这是我的密码:
String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
JComboBox comboBox = new JComboBox(fonts);// create a combo box with the array
comboBox.setFont(new Font("Times New Roman", Font.PLAIN, 12));// set the font
comboBox.setBounds(21, 6, 193, 25);// set size and location
add(comboBox);
我应该如何使所有文本字段根据组合框中的选定项更改字体?在这里,您可以找到一个简单的main方法中嵌入的工作示例(如果我理解正确的话) 为了保持简单,我只使用了一个组合框来选择字体名称,但最好再放两个组合框,以便使字体大小和样式(粗体、普通、斜体)也可以选择 基本上是的,最常见的方法是将actionListener绑定到comboBox,以便在comboBox与用户交互时更改字体。当然,这不是唯一的方法,您甚至可以通过监听键盘按键来触发操作,或者实现其他一些方法来识别用户更改字体的意图,但据我所知,我在示例中使用的操作侦听器是最简单的方法
package fontchooser;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class ComboFont {
// Put this in other two combo-boxes if you want to make these selectable by user
public static int default_size = 16;
public static int default_style = Font.PLAIN;
public static void main(String[] args) {
String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
GridBagLayout layout = new GridBagLayout();
layout.columnWidths = new int[] {400};
layout.rowHeights = new int[] {100,300};
JFrame container = new JFrame();
container.setLayout(layout);
container.setBounds(150,150,400,400);
container.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox<String> comboFontNames = new JComboBox<String>(fonts);
JTextArea textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(textArea);
GridBagConstraints comboContraints = new GridBagConstraints();
comboContraints.gridx = 0;
comboContraints.gridy = 0;
// This only set font to display on combo
comboFontNames.setFont(new Font("Times New Roman", Font.PLAIN, 12));
container.add(comboFontNames, comboContraints);
GridBagConstraints scrollerContraints = new GridBagConstraints();
scrollerContraints.gridx = 0;
scrollerContraints.gridy = 1;
scrollerContraints.gridwidth = 400;
scrollerContraints.fill = GridBagConstraints.BOTH;
container.add(scrollPane, scrollerContraints);
// Variant of action listener with lambda (since java 8)
comboFontNames.addActionListener((e) -> {
String selectedFamilyName = (String)comboFontNames.getSelectedItem();
Font selectedFont = new Font(selectedFamilyName, default_style, default_size);
textArea.setFont(selectedFont);
textArea.repaint();
});
container.setVisible(true);
}
}
package-fontcooser;
导入java.awt.Font;
导入java.awt.GraphicsEnvironment;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
公共类组合字体{
//如果您想让用户选择这些选项,请将其放在其他两个组合框中
公共静态int默认值_size=16;
公共静态int default_style=Font.PLAIN;
公共静态void main(字符串[]args){
String[]fonts=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
GridBagLayout=新的GridBagLayout();
layout.columnWidths=新int[]{400};
layout.rowHeights=newint[]{100300};
JFrame容器=新的JFrame();
容器。设置布局(布局);
集装箱立根(150400400);
container.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox comboFontNames=新的JComboBox(字体);
JTextArea textArea=新的JTextArea();
JScrollPane scrollPane=新的JScrollPane();
scrollPane.setViewportView(文本区域);
GridBagConstraints comboContraints=新的GridBagConstraints();
combocontaints.gridx=0;
ComboControints.gridy=0;
//这仅将字体设置为在组合框上显示
comboFontNames.setFont(新字体(“Times new Roman”,Font.PLAIN,12));
container.add(comboFontNames、combocontaints);
GridBagConstraints ScrollerContrains=新的GridBagConstraints();
scrollerContraints.gridx=0;
scrollerContraints.gridy=1;
scrollerContraints.gridwidth=400;
scrollerContraints.fill=GridBagConstraints.BOTH;
添加(滚动窗格、滚动控件);
//带有lambda的动作侦听器的变体(自java 8以来)
comboFontNames.addActionListener((e)->{
字符串selectedFamilyName=(字符串)comboFontNames.getSelectedItem();
Font selectedFont=新字体(selectedFamilyName、默认样式、默认大小);
textArea.setFont(selectedFont);
textArea.repaint();
});
container.setVisible(true);
}
}
我希望这就是你需要的!再见
Alessio“我想我应该使用getSelectedItem()so并向JComboBox添加一个actionListener来将此信息传递给JTextArea?”-这是一个很好的开始,希望,
JTextArea
只支持纯文本。您必须使用JTextPane
,但是如果您希望文本的不同部分具有不同的字体,那么就需要使用@MadProgrammer建议的JTextPane
(或JEditorPane
)。但是,如果要更改所有文本的字体(在JTextArea
中),则有一种方法