import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class FontWin extends Frame implements ItemListener,ActionListener
{
Label lfont=new Label("字体:"),
  lglyph=new Label("字形:"),
  lsize=new Label("大小:"),
  label=new Label(),
      label_1 = new Label("预览:");
Button submit=new Button("确定"),
   resert=new Button("取消");
    TextField 字体=new TextField(),
      字形=new TextField(),
      大小=new TextField();
List  list1=new List(7,false),
  list2=new List(7,false),
  list3=new List(7,false);
Font f;
FontWin(String s)
{
super(s);
setResizable(false);
        setBounds(100, 100, 486,475); Panel panel = new Panel();
        panel.setLayout(null);
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
String fontName[]=ge.getAvailableFontFamilyNames();
String[] fontGlyph={"常规","斜体","粗体","粗斜体"};
     String[] fontSize={"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"};
for(int i=0;i<fontName.length;i++)
{
list1.add(fontName[i]);
}
for(int i=0;i<fontGlyph.length;i++)
{
list2.add(fontGlyph[i]);
}
for(int i=0;i<fontSize.length;i++)
{
list3.add(fontSize[i]);
}
lfont.setBounds(10, 11, 35, 20);
panel.add(lfont);
字体.setBounds(10, 32, 120, 21);
panel.add(字体);
list1.setBounds(10,54,120,200);
panel.add(list1);
lglyph.setBounds(151, 11, 35, 20);
panel.add(lglyph);
字形.setBounds(151, 32, 120, 21);
panel.add(字形);
list2.setBounds(151,54,120,200);
panel.add(list2);
label_1.setBounds(151, 255, 35, 20);
panel.add(label_1);
label.setBounds(151, 271, 207, 63);
        label.setBackground(new Color(255, 255, 255));
        label.setText("字体样式 AaBbCc");
label.setBackground(Color.green);
        panel.add(label);
lsize.setBounds(285, 12, 35, 20);
panel.add(lsize);
大小.setBounds(285, 32, 73, 21);
panel.add(大小);
list3.setBounds(285,54,120,200);
panel.add(list3);
submit.setBounds(154, 340, 100, 25);
submit.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent arg0) {
    setVisible(false);   
   }
  });
panel.add(submit);
resert.setBounds(258, 340, 100, 25);
panel.add(resert);
add(panel, BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        }); //关闭窗口事件
list1.addItemListener(this);
list2.addItemListener(this);
list3.addItemListener(this);
submit.addActionListener(this);
resert.addActionListener(this);
setVisible(true);
validate();
}
public void itemStateChanged(ItemEvent e)
{
String name=list1.getSelectedItem();
String style=list2.getSelectedItem();
String size=list3.getSelectedItem();
字体.setText(name);
字形.setText(style);
大小.setText(size);
int intstyle=0;
    int intSize = Integer.parseInt(size);
if(style.equals("常规"))
intstyle=Font.PLAIN;
        if(style.equals("粗体"))
                intstyle=Font.BOLD;
        if(style.equals("斜体"))
                intstyle=Font.ITALIC;
        if(style.equals("粗斜体"))
                intstyle=Font.BOLD+Font.ITALIC;
 f = new Font("name",intstyle,intSize);
label.setFont(f);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==resert)
System.exit(0);
}
}
public class w2
{
public static void main(String[] args)
{
FontWin f=new FontWin("字体");

}

解决方案 »

  1.   

             f = new Font("name",intstyle,intSize);
    是 name 不是 “name”
      

  2.   

        TextField 字体=new TextField(),
                  字形=new TextField(),
                  大小=new TextField();
    内容初始化为空。
    一开始选择时会抛出 NPE
      

  3.   

    这个是后来改试试的,之前就是name,可是一样没变化的
      

  4.   


    给你调了一下。。你报错是没有初始化。。字形,字体,,大小。。package com.test.exam;import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Frame;
    import java.awt.GraphicsEnvironment;
    import java.awt.Label;
    import java.awt.List;
    import java.awt.Panel;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;public class TxtTest {
    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    FontWin f = new FontWin("字体");
    }
    }class FontWin extends Frame implements ItemListener, ActionListener {
    Label lfont = new Label("字体:"), 
    lglyph = new Label("字形:"),
    lsize = new Label("大小:"), 
    label = new Label(), 
    label_1 = new Label("预览:");
    Button submit = new Button("确定"), resert = new Button("取消");
    TextField 字体 = new TextField(), 字形 = new TextField(), 大小 = new TextField();
    List list1 = new List(7, false), list2 = new List(7, false),
    list3 = new List(7, false);
    Font f; FontWin(String s) {
    super(s);
    setResizable(false);
    setBounds(100, 100, 486, 475); Panel panel = new Panel();
    panel.setLayout(null);
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    String fontName[] = ge.getAvailableFontFamilyNames();
    String[] fontGlyph = { "常规", "斜体", "粗体", "粗斜体" };
    String[] fontSize = { "8", "9", "10", "11", "12", "14", "16", "18",
    "20", "22", "24", "26", "28", "36", "48", "72" };
    for (int i = 0; i < fontName.length; i++) {
    list1.add(fontName[i]);
    }
    for (int i = 0; i < fontGlyph.length; i++) {
    list2.add(fontGlyph[i]);
    }
    for (int i = 0; i < fontSize.length; i++) {
    list3.add(fontSize[i]);
    }
    lfont.setBounds(10, 11, 35, 20);
    panel.add(lfont);
    字体.setBounds(10, 32, 120, 21);
    panel.add(字体);
    list1.setBounds(10, 54, 120, 200);
    panel.add(list1);
    lglyph.setBounds(151, 11, 35, 20);
    panel.add(lglyph);
    字形.setBounds(151, 32, 120, 21);
    panel.add(字形);
    list2.setBounds(151, 54, 120, 200);
    panel.add(list2);
    label_1.setBounds(151, 255, 35, 20);
    panel.add(label_1);
    label.setBounds(151, 271, 207, 63);
    label.setBackground(new Color(255, 255, 255));
    label.setText("字体样式 AaBbCc");
    label.setBackground(Color.green);
    panel.add(label);
    lsize.setBounds(285, 12, 35, 20);
    panel.add(lsize);
    大小.setBounds(285, 32, 73, 21);
    panel.add(大小);
    list3.setBounds(285, 54, 120, 200);
    panel.add(list3);
    submit.setBounds(154, 340, 100, 25);
    submit.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
    setVisible(false);
    }
    });
    panel.add(submit);
    resert.setBounds(258, 340, 100, 25);
    panel.add(resert);
    add(panel, BorderLayout.CENTER);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    }); // 关闭窗口事件
    list1.addItemListener(this);
    list2.addItemListener(this);
    list3.addItemListener(this);
    submit.addActionListener(this);
    resert.addActionListener(this);
    setVisible(true);
    validate();
    } public void itemStateChanged(ItemEvent e) {
    String name = "宋体"; // 初始样式
    int intstyle = Font.PLAIN; // 初始字形
    int intSize = 12; //初始字体大小
    if(list1.getSelectedItem() != null){
    name = list1.getSelectedItem();
    字体.setText(name);
    }

    if(list2.getSelectedItem() != null){
    String style = list2.getSelectedItem();
    字形.setText(style);
    if (style.equals("常规"))
    intstyle = Font.PLAIN;
    if (style.equals("粗体"))
    intstyle = Font.BOLD;
    if (style.equals("斜体"))
    intstyle = Font.ITALIC;
    if (style.equals("粗斜体"))
    intstyle = Font.BOLD + Font.ITALIC;
    }
    if(list3.getSelectedItem() != null){
    intSize = Integer.parseInt(list3.getSelectedItem());
    大小.setText(String.valueOf(intSize));
    }

    f = new Font(name, intstyle, intSize);
    label.setFont(f);
    } public void actionPerformed(ActionEvent e) {
    if (e.getSource() == resert)
    System.exit(0);
    }
    }
      

  5.   

    嗯嗯,还一直找是什么原因呢,谢谢了。不过字体样式不改变的原因不是这个,刚刚才发现,原来字体在awt组件中是默认显示的,只有在swing组件中才有效