我有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));
..然后它有效。知道为什么会这样吗?
答案 0 :(得分:2)
问题是大小是由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);
}
});
创建一个新的动作对象只是为了调用一个动作,这有点奇怪;我可能会重写这个只是直接修改编辑器对象上的字体。
顺便说一句,拥有像这样的静态可变变量通常是一个坏主意。
看起来您可以通过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);
}
但我在第一时间发布的内容应该有效。如果它不让我知道问题是什么,我会再看看。