2012-12-31 85 views
3

我有这段代码,当用户点击其中一个字体“粗体或斜体...”时,文本应该改变。我不能添加动作监听器,将做到这一点:使用菜单更改文本字体

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 
+0

那你试试?你有什么麻烦? – SLaks

+1

请正确缩进您的代码。 – SLaks

+1

首先阅读如何将[菜单](http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html)添加到JFrame。如果你有问题,然后问,我们会提供帮助。 –

回答

1

您需要添加ActionListnerFontBox (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); 
    } 
}); 
3

而不是给你解决顾左右而言他,这里有一些准则,以帮助您:

  • 再讲一个ActionListener的概念(或即使是Action),也可以在JComboBoxfontbox中加一个。
  • 为您的Font样式创建一个JComboBox自定义对象,以包装显示的文本和要使用的整数常量(提示)。作为参考,请参阅example
  • 然后在您的ActionListener中,读取从getSelectedItem返回的值,并相应地使用来自对象的样式常量调用JTextField.setFont