Java StyledEditorKit.FontSizeAction()不';不能通过按钮工作

Java StyledEditorKit.FontSizeAction()不';不能通过按钮工作,java,swing,jbutton,actionlistener,jtextpane,Java,Swing,Jbutton,Actionlistener,Jtextpane,我有一个JToolBar和一个JTextPane。在工具栏上,我有加粗、下划线等按钮。我试图添加一个按钮,当按下时,会增加文本的大小 此代码出现在我的工具栏类的开头,并被设置为等于显示类中的int,默认值为24。它用于设置原始字体大小 static int size=Display.size 这段代码在我的ToolBar()构造函数中 final JButton reduceButton = new JButton(new ImageIcon("res/reduce.png")); reduce

我有一个
JToolBar
和一个
JTextPane
。在工具栏上,我有加粗、下划线等按钮。我试图添加一个按钮,当按下时,会增加文本的大小

此代码出现在我的工具栏类的开头,并被设置为等于显示类中的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
时,大小是固定的-无论最初运行代码时大小的值是多少

如果您需要动态更改字体大小,就像您所做的那样,那么您需要在早期的操作侦听器中进行更改。试试像这样的东西

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字符串覆盖在构造函数中指定的字体大小;看


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

要更快获得更好的帮助,请发布一条。好的,我会这样做。谢谢你的链接!实际上,现在又出现了另一个问题。写另一篇文章还不够重要,所以让我在这里问一下:如果我选择一行文本,并将其缩小到8,然后选择另一行文本并缩小,而不是从所选文本的大小开始,而是从8开始。我知道这是因为大小是一个全局变量,但我想不出解决的办法;这些操作应用于选择,而不是全局。这也是全球规模是个坏主意的另一个原因。但是,是的,还有一个问题
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);
    }