使用菜单更改文本字体

时间:2012-12-31 16:36:33

标签: java swing fonts awt jmenuitem

我有这样的代码,当用户点击其中一种字体“粗体或斜体......”时,文本应该会改变。我无法添加将执行此操作的动作侦听器:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class question4 extends JFrame {

    private JTextField textField;
    private JComboBox fontbox;
    private String names[]={ "Bold","Italic","Plain"};
    private Icon icons[]={};


    public question4()
    {
        super("JcheckBox");
        setLayout(new FlowLayout());//set frame
        fontbox = new JComboBox(names);//set jcobobox
        fontbox.setMaximumRowCount(3);
        //listener

        add(fontbox);
        //add the text content
        textField = new JTextField ("Hello World", 20);
        textField.setFont(new Font("Calibri", Font.BOLD,18));//set the text font and size
        add(textField);//add textfield to jframe
    }

    public static void main(String args[])
    {
        question4 obj = new question4();//create object
        obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        obj.setSize(700,400);
        obj.setVisible(true);
    }//end main

 }//end class

2 个答案:

答案 0 :(得分:3)

而不是直接向您提供解决方案,以下是一些可以帮助您的指南:

  • 重新审视ActionListener(甚至是Action)的概念,特别是在JComboBox fontbox添加一个。{/ li>
  • JComboBox样式创建一个Font自定义对象,以便包含显示的文本和要使用的整数常量(提示)。作为指南,请参阅此example
  • 然后在ActionListener中,阅读getSelectedItem返回的值,并使用对象中的样式常量相应地调用JTextField.setFont

答案 1 :(得分:1)

您需要将ActionListner添加到FontBox (JcomboBox),例如:

  private void fontboxActionPerformed(java.awt.event.ActionEvent evt) {
    String font = (String) fontbox.getSelectedItem();

    if(font=="Bold")
        textField.setFont(new Font("Calibri", Font.BOLD, 18));
    else if(font == "Italic")
        textField.setFont(new Font("Calibri", Font.ITALIC, 18));
    else if(font == "Plain")
        textField.setFont(new Font("Calibri", Font.PLAIN, 18));

}

并在您的代码中调用此方法,如下所示:

fontbox.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        fontboxActionPerformed(evt);
    }
});