更改JTextArea字体大小的问题

时间:2016-09-07 13:55:53

标签: java swing jtextarea

我试图提示用户输入来自JOptionPane的输入来改变JTextArea的字体大小,如下所示," console"。

问题

但是,单击JMenu项目时,JOptionPane未显示。

代码

Font font = new Font("Arial", Font.PLAIN, 12);

panel = new JPanel();
panel.setLayout(new BorderLayout());
add(panel, BorderLayout.CENTER);

JTextArea console = new JTextArea();
console.setLineWrap(true);
console.setWrapStyleWord(true);
console.setEditable(false);
console.setFont(font);

JScrollPane scroll = new JScrollPane(console);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
panel.add(scroll, BorderLayout.CENTER);

JMenuBar bar = new JMenuBar();
panel.add(bar, BorderLayout.NORTH);

JMenu size = new JMenu("Size");
size.addActionListener(new ActionListener() {
    @Override public void actionPerformed(ActionEvent e) {
        String fontSize = JOptionPane.showInputDialog(panel, "New font size, 6 or larger:", "Set Font Size", JOptionPane.OK_CANCEL_OPTION);
        Font newFont = font.deriveFont(Integer.parseInt(fontSize));
        console.setFont(newFont);
    }
});

bar.add(size);

2 个答案:

答案 0 :(得分:1)

这似乎是一个bug,但您可以使用@ answer中所述的'MenuListener'@TPete

以下是他在解决问题的答案中提供的代码:

JMenu menu = new JMenu("MyMenu");
menu.addMenuListener(new MenuListener() {

    @Override
    public void menuSelected(MenuEvent e) {
        System.out.println("menuSelected");
    }

    @Override
    public void menuDeselected(MenuEvent e) {
        System.out.println("menuDeselected");
    }

    @Override
    public void menuCanceled(MenuEvent e) {
        System.out.println("menuCanceled");
    }
});

基本上他使用MenuListener代替ActionListener来成功捕获事件。

希望这有帮助!

答案 1 :(得分:0)

当我点击JMenu项目大小时,没有显示JOptionPane的问题,因为我们需要显示窗格的容器不正确

尝试以下

JOptionPane.showInputDialog(**this**, "New font size, 6 or larger:",  
    "Set Font Size", JOptionPane.OK_CANCEL_OPTION);