1

我有两个按钮来编辑文本中的字体。粗体按钮和斜体按钮,分别,它们工作正常,但不能一起使用。如何让我的按钮一起工作?(粗体+斜体)

final JToggleButton boldbuttonpage1 = new JToggleButton("");
        boldbuttonpage1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(boldbuttonpage1.isSelected()){
                    textpage1.setFont(new Font("Arial", Font.BOLD, 12));
                }
                else textpage1.setFont(new Font("Arial", Font.PLAIN, 12));
            }
        });
        boldbuttonpage1.setBounds(21, 32, 27, 23);
        gtapage1.add(boldbuttonpage1);

        final JToggleButton italicbuttonpage1 = new JToggleButton("");
        italicbuttonpage1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(italicbuttonpage1.isSelected()){
                    textpage1.setFont(new Font("Arial", Font.ITALIC, 12));
                }
                else textpage1.setFont(new Font("Arial", Font.PLAIN, 12));
            }
        });
        italicbuttonpage1.setBounds(21, 93, 27, 23);
        gtapage1.add(italicbuttonpage1);
4

1 回答 1

2

当您按下一个按钮设置字体时,您会覆盖以前的字体,从而消除之前按下按钮的任何可能影响。我自己,我会让两个 ActionListeners(或 ItemListeners)调用相同的方法,一个检查两个按钮的状态并将字体设置为与按钮值相对应的方法。

另外,根据我的评论,去掉 Eclipse 标签,而是在您的问题中添加一个 Swing 标签,这样它就不会误导任何人。Eclipse 只是您用作 IDE 的工具,与您的问题无关。

顺便说一句,您不应该设置组件的边界或使用空布局,而是希望使用适当的布局管理器。


编辑
你问:

检查按钮状态的方法?你能详细说明一下吗?

您已经知道如何通过isSelected()方法调用检查按钮的状态。好吧,不要在按下按钮时只检查一个按钮,而是同时检查两者。事实上,你可以给两个按钮相同的 ActionListener:

ActionListener actionListener = new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    // check selected states of both button one and two and set font accordingly
    // you can use if (foo && bar) {...}
    // else if (foo) {...}
    // else if (bar) {...}
    // else {.. default...}
  }
};
button1.addActionListener(actionListener);
button2.addActionListener(actionListener);
于 2014-01-06T18:54:56.240 回答