gpt4 book ai didi

java - StyledEditorKit.FontSizeAction() 无法通过 JButton 工作

转载 作者:行者123 更新时间:2023-12-02 07:35:47 25 4
gpt4 key购买 nike

我有一个 JToolBar 和一个 JTextPane。工具栏上有用于加粗、下划线等的按钮。我尝试添加一个按钮,按下该按钮会增加文本的大小。

此代码出现在我的 ToolBar 类的开头,并设置为等于我的 Display 类中的一个 int,默认值为 24。它用于设置原始字体大小。

static int size = Display.size;

此代码位于我的 ToolBar() 构造函数中。

final JButton reduceButton = new JButton(new ImageIcon("res/reduce.png"));
reduceButton.setToolTipText("Reduce Text...");
reduceButton.setFocusable(false);
reduceButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
size -= 4;
System.out.println("FontSize = " + size);
}
});
reduceButton.addActionListener(new StyledEditorKit.FontSizeAction("myaction-", size));

由于某种原因,该按钮不起作用,但是如果我将代码更改为:

reduceButton.addActionListener(new StyledEditorKit.FontSizeAction("myaction-", 40));

..然后就可以了。知道这是为什么吗?

最佳答案

问题在于,该大小是由第二次调用 addActionListener 确定的 - 无论该代码最初运行时 size 的值是什么,它都会保留下来。

如果您需要像您一样动态更改字体大小,那么您需要在之前的操作监听器中执行此操作。尝试类似的事情

reduceButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
size -= 4;
System.out.println("FontSize = " + size);
// Font has changed, instantiate a new FontSizeAction and execute it immediately.
new StyledEditorKit.FontSizeAction("myaction-", size).actionPerformed(arg0);
}
});

创建一个新的 Action 对象只是为了调用一个 Action 有点奇怪;我可能会重写它只是为了直接修改编辑器对象上的字体。

顺便说一句,拥有这样的静态可变变量通常是一个坏主意。

看起来你可以通过actionEvent中的actionCommand字符串覆盖你在构造函数中指定的字体大小;请参阅http://opensourcejavaphp.net/java/harmony/javax/swing/text/StyledEditorKit.java.html

public void actionPerformed(final ActionEvent event) {
Object newValue = null;
if (event != null) {
try {
newValue = new Integer(event.getActionCommand());
} catch (NumberFormatException e) {
}
}
performAction(event, StyleConstants.FontSize, null, defaultValue,
newValue, false);
}

但是我首先发布的内容应该有效。如果它不能让我知道问题是什么,我会再看一下。

关于java - StyledEditorKit.FontSizeAction() 无法通过 JButton 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12241935/

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