请教各位高手,我如何将各种字体的名称加入JComboBox组件中

baolei724 2008-03-08 12:27:27
我想实现一个类似于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();
^
...全文
134 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzx2080205 2010-09-18
  • 打赏
  • 举报
回复
哥们 也许我这个回帖晚了些......
字体的名称加入到一个一维数组对象中,方法如下: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();
}
}
jy02411368 2008-03-11
  • 打赏
  • 举报
回复
建议你使用开发工具 里面可以在项目选项里直接加 呵呵烂的写代码了
cursor_wang 2008-03-11
  • 打赏
  • 举报
回复
给你个程序参考下.

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();
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧