我想实现一个类似于Wordz中的字体选择下拉框,我觉得应该把每个字体的名称加入到一个一维数组对象中,然后再放入JComboBox组件中,代码如下:
import java.awt.*;
import java.awt.Font;
import java.awt.event.*;
import javax.swing.*;
public class FontDemo extends JFrame {
        
     JComboBox fontComboBox=new JComboBox();
     JLabel fontLabel=new JLabel();
    public FontDemo(){
     Object[] obj={ };
     for(int j=0;j<obj.length;j++)
     obj[j]=(Object)new Font().getName();
     fontComboBox.setMaximumRowCount(4);
     fontComboBox.setRenderer(new FontCellRenderer());
     for(int i=0;i<obj.length;i++)
        fontComboBox.addItem(obj[i]); 
        fontComboBox.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent evt){  //处理事件
         Object value = (Object)fontComboBox.getSelectedItem();  //得到选择的内容,此处为一维数组
         fontLabel.setText(value.toString());  //设置iconLabel的文本
       }
      });
      
      this.getContentPane().setLayout(new BorderLayout());  //设置布局管理器
      this.getContentPane().add(fontComboBox,BorderLayout.NORTH); //在上方增加下拉框
      this.getContentPane().add(fontLabel,BorderLayout.CENTER);  //在中间增加iconLabel,用于响应选择的变化
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //关闭窗口时退出程序
      this.setSize(350,260);  //设置窗口尺寸
      this.setVisible(true);  //显示窗口
    }
    
    public static void main(String[] args) {
              new FontDemo();
    }
}import javax.swing.*;
import javax.swing.border.LineBorder;
public class FontCellRenderer extends JLabel implements ListCellRenderer{
 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isselected, boolean cellHasFocus){
  JLabel label=new JLabel();
  Font font=(Font)value;
  label.setText(font.getFamily());
  label.setFont(font);
  return label;
 }
}但为什么程序总出现如下问题:
cannot resolve symbol
symbol  : constructor Font ()
location: class java.awt.Font
            obj[j]=(Object)new Font().getName();
                               ^

解决方案 »

  1.   

    给你个程序参考下.import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;class TxtFont extends JFrame implements ListSelectionListener{
    JLabel l=new JLabel("示例文本 Simple Text");
    JList j1=new JList();
    JList j2=new JList();

    JScrollPane jScrollPane1=new JScrollPane();
    JScrollPane jScrollPane2=new JScrollPane();

    JPanel p1=new JPanel();
    JPanel p2=new JPanel();

    TxtFont(){
    this.setLayout(new BorderLayout());
    this.add(p1,BorderLayout.NORTH);
    this.add(p2,BorderLayout.SOUTH);
    p1.add(l);

    jScrollPane1.getViewport().add(j1);
    p2.add(jScrollPane1);
    jScrollPane2.getViewport().add(j2);
    p2.add(jScrollPane2);

    GraphicsEnvironment env=GraphicsEnvironment.getLocalGraphicsEnvironment();
    String fontNames[]=env.getAvailableFontFamilyNames();
    j1.setListData(fontNames);

    String fontSizes[]={"9","10","11","12","14","16","18","20","24","26","28","30","32"};
    j2.setListData(fontSizes);

    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setTitle("设置文本字体");
    this.setSize(350,300);
    this.setVisible(true);
    j1.addListSelectionListener(this);
    j2.addListSelectionListener(this);
    }

    public void valueChanged(ListSelectionEvent e){
    if(e.getSource().equals(j2))
    {
    int newFontSize=Integer.parseInt((String)j2.getSelectedValue());
    Font f=l.getFont();
    Font newFont=new Font(f.getName(),f.getStyle(),newFontSize);
    l.setFont(newFont);
    }
    else
    {
    String newFontName=(String)j1.getSelectedValue();
    Font f=l.getFont();
    Font newFont=new Font(newFontName,f.getStyle(),f.getSize());
    l.setFont(newFont);
    }
    }

    public static void main(String[] args){
    new TxtFont();
    }
    }
      

  2.   

      哥们 也许我这个回帖晚了些......
      字体的名称加入到一个一维数组对象中,方法如下:Font[] fonts={
                           new Font("Serif",Font.BOLD,20),
                           new Font("Monospaced",Font.ITALIC,20),
                           new Font("宋体",Font.PLAIN,20),
                           new Font("黑体",Font.CENTER_BASELINE,20),
                           new Font("隶书",Font.HANGING_BASELINE,20),
                           new Font("华文楷体",Font.LAYOUT_LEFT_TO_RIGHT,20),};   
      实现一个类似于Word中的字体选择下拉框  java程序如下:import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class fontRenderer extends JFrame{
         JComboBox comboBox;
         JTextArea area;
         fontRenderer(){
            super("字体选择下拉框");
            init();
            setSize(300,170);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         }
        private void init() {         Font[] fonts={new Font("Serif",Font.BOLD,20),
                           new Font("Monospaced",Font.ITALIC,20),
                           new Font("宋体",Font.PLAIN,20),
                           new Font("黑体",Font.CENTER_BASELINE,20),
                           new Font("隶书",Font.HANGING_BASELINE,20),
                           new Font("华文楷体",Font.LAYOUT_LEFT_TO_RIGHT,20),
                           new Font("华文仿宋",Font.LAYOUT_LEFT_TO_RIGHT,20),
                           new Font("华文新魏",Font.LAYOUT_LEFT_TO_RIGHT,20),
                           new Font("方正舒体",Font.LAYOUT_LEFT_TO_RIGHT,20),
                           new Font("华文彩云",Font.LAYOUT_LEFT_TO_RIGHT,20),
                           new Font("华文行楷",Font.LAYOUT_LEFT_TO_RIGHT,20),
                           new Font("华文中宋",Font.LAYOUT_LEFT_TO_RIGHT,20),
          };
         
           comboBox=new JComboBox(fonts);
           comboBox.setMaximumRowCount(4);
           comboBox.setEditable(false);
           comboBox.setRenderer(new fontCellRenderer());
           add(comboBox,BorderLayout.NORTH);       area=new JTextArea();
           area.setBackground(Color.lightGray);
           area.setForeground(Color.red);
           add(new JScrollPane(area),BorderLayout.CENTER);       ActionListener actionListener=new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                 
                 Font selectedFont=(Font)comboBox.getSelectedItem();
                 String name=selectedFont.getName();
                 area.setFont(selectedFont);
                 area.setText("字体设置为:"+name+"\n");
                }
              };
           comboBox.addActionListener(actionListener);    }
        class fontCellRenderer implements ListCellRenderer{
            public Component getListCellRendererComponent(JList list, Object value,
                          int index, boolean isSelected, boolean cellHasFocus) {
                JLabel label=new JLabel();
                Font font=(Font)value;
                label.setText(font.getFamily());
                label.setFont(font);            return label;
            }
          }
         public static void main(String args[]){
            fontRenderer win=new fontRenderer();
          }
    }