我想实现一个类似于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();
^
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();
^
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();
}
}
字体的名称加入到一个一维数组对象中,方法如下: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();
}
}