gpt4 book ai didi

java - 我如何允许用户使用 JComboBox 更改他在 JTextPane 中的字体?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:57:31 27 4
gpt4 key购买 nike

我发现 Internet 上缺少有关 JTextPanes 主题的大量有用文档/教程。我正在尝试做一个简单的文本处理器,我希望它能够从 JComboBox 中选择一个字体系列,该字体系列会根据用户在其系统上安装的字体进行 self 填充。但是,无论我尝试什么,我都无法弄清楚如何让它发挥作用。

我拥有的是一个基于 JTextPane 构建的工具栏类。目前,它有一堆样式按钮,用于设置对齐方式和粗体、斜体和下划线。

这是我的代码:

/**
* The StyleBar is used to customize styles in a Styled Document. It will take a
* JTextPane as an argument for its constructor and then all actions to be taken
* will affect the text in it.
*
* @author Andrew
*/
public class StyleBar extends JToolBar {

private JLabel fontLbl;
private JComboBox fontBox;

// ...Irrelevant stuff to the problem at hand.

/**
* The initEvents method is used to initialize the necessary events for the
* tool bar to actually do its job. It establishes the focus listener to the
* buttons on the bar, and gives each one its individual functionality. It
* also establishes the Font Selection interface.
*/
public void initEvents() {
//For each item in the tool bar, add the focus listener as well as the
//formatting listeners:
boldFormat.addActionListener(new StyledEditorKit.BoldAction()); //boldFormat is
boldFormat.addActionListener(resetFocus); //a JButton

//Ditto for my italicsFormat and underlineFormat button(s) in the toolbar

leftAlign.addActionListener(new StyledEditorKit.AlignmentAction(null,
StyleConstants.ALIGN_LEFT));
leftAlign.addActionListener(resetFocus); //This listener just resets focus
//back onto the TextPane.

//Ditto for my right and centerAlign buttons

//Set up the Font list, and add a listener to the combo box
buildFontMenu();
}

/**
* The buildFontMenu detects all of the SYstem's available fonts and adds
* them to the Font Selection box.
*/
public void buildFontMenu(){
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
final String[] fontNames = ge.getAvailableFontFamilyNames();
for (int i = 0; i < fontNames.length; i++){
//What do I do here to take the entry at String[i] and make it so that when
//the user selects it it sets the font Family in a similar way to that of
//pressing the boldFormat button or the leftAlign button?
}
}

//Everything else is irrelevant

总结一下我的问题:我不知道如何正确地将监听器设置为 ComboBox,以便 a) 它对所选的单个字体敏感,b) 以某种方式使用 StyledEditorKit.FontFamilyAction 让生活变得轻松?

Slash,如果我以错误的方式处理任何事情,我很乐意听到正确的方法。正如我所说,我在互联网上的消息来源对这个主题不是很清楚。

非常感谢!

最佳答案

StyledEditorTestAction 放在 JToolBar 中,但想法是一样的。另见 Charles Bell 的 HTMLDocumentEditor,提到了 here .例如,

bar.add(new StyledEditorKit.FontFamilyAction("Serif", Font.SERIF));
bar.add(new StyledEditorKit.FontFamilyAction("SansSerif", Font.SANS_SERIF));

附录:当您使用JComboBox时,您可以转发事件到相应的StyledEditorKit Action,默认情况下对当前选择进行操作。

JComboBox combo = new JComboBox();
combo.addItem("Serif");
combo.addItem("Sans");
combo.addActionListener(new ActionListener() {

Action serif = new StyledEditorKit.FontFamilyAction("Serif", Font.SERIF);
Action sans = new StyledEditorKit.FontFamilyAction("Sans", Font.SANS_SERIF);

@Override
public void actionPerformed(ActionEvent e) {
if ("Sans".equals(e.getActionCommand())) {
sans.actionPerformed(e);
} else {
serif.actionPerformed(e);
}
}
});

关于java - 我如何允许用户使用 JComboBox 更改他在 JTextPane 中的字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568649/

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