代码哪错了?
package event;import java.awt.*;
import java.awt.event.*;
public class Item extends Frame implements ItemListener
{
private static final long serialVersionUID = 1L;
static Item frm=new Item();
static Checkbox cb1=new Checkbox("粗体");
static Checkbox cb2=new Checkbox("斜体",true);
static Checkbox cbg1=new Checkbox("红色",true);
static Checkbox cbg2=new Checkbox("蓝色");
static TextArea ta=new TextArea("选项事件类ItemEvent的使用方法");
public static void main(String args[])
{
frm.setLayout(new FlowLayout(FlowLayout.LEFT));
frm.setBounds(100, 100, 400, 300);
frm.add(cb1);
frm.add(cb2);
frm.add(cbg1);
frm.add(cbg2);
frm.add(ta);
cb1.addItemListener(frm);
cb2.addItemListener(frm);
cbg1.addItemListener(frm);
cbg2.addItemListener(frm);
CheckboxGroup grp=new CheckboxGroup();
cbg1.setCheckboxGroup(grp);
cbg2.setCheckboxGroup(grp);
Font f1=ta.getFont();
ta.setFont(new Font(f1.getName(),Font.ITALIC,f1.getSize()));//这句去掉就对了,但是想设个默认值
ta.setForeground(Color.red);
frm.setVisible(true);
}
public void itemStateChanged(ItemEvent e)
{
Checkbox cb=(Checkbox) e.getSource();
Font font1=ta.getFont();
int stytle1=font1.getStyle();
if(cb==cbg1) ta.setForeground(Color.red);
else if(cb==cbg2) ta.setForeground(Color.blue);
else if((cb==cb1)||(cb==cb2))
{
if(cb==cb1) stytle1=stytle1^1;
else if(cb==cb2) stytle1=stytle1^2;
}
ta.setFont(new Font(font1.getName(),stytle1,font1.getSize()));
}
}
搜索更多相关的解决方案:
代码
----------------解决方案--------------------------------------------------------
程序代码:
package event;
import java.awt.*;
import java.awt.event.*;
public class Item extends Frame implements ItemListener
{
private static final long serialVersionUID = 1L;
static Item frm=new Item();
static Checkbox cb1=new Checkbox("粗体");
static Checkbox cb2=new Checkbox("斜体",true);
static Checkbox cbg1=new Checkbox("红色",true);
static Checkbox cbg2=new Checkbox("蓝色");
static TextArea ta=new TextArea("选项事件类ItemEvent的使用方法");
public static void main(String args[])
{
frm.setLayout(new FlowLayout(FlowLayout.LEFT));
frm.setBounds(100, 100, 400, 300);
frm.add(cb1);
frm.add(cb2);
frm.add(cbg1);
frm.add(cbg2);
frm.add(ta);
cb1.addItemListener(frm);
cb2.addItemListener(frm);
cbg1.addItemListener(frm);
cbg2.addItemListener(frm);
CheckboxGroup grp=new CheckboxGroup();
cbg1.setCheckboxGroup(grp);
cbg2.setCheckboxGroup(grp);
ta.setForeground(Color.red);
frm.setVisible(true);
Font f1=ta.getFont();
ta.setFont(new Font(f1.getName(),Font.ITALIC,f1.getSize()));//放在这里就正常了
}
public void itemStateChanged(ItemEvent e)
{
Checkbox cb=(Checkbox) e.getSource();
Font font1=ta.getFont();
int stytle1=font1.getStyle();
if(cb==cbg1) ta.setForeground(Color.red);
else if(cb==cbg2) ta.setForeground(Color.blue);
else if((cb==cb1)||(cb==cb2))
{
if(cb==cb1) stytle1=stytle1^1;
else if(cb==cb2) stytle1=stytle1^2;
}
ta.setFont(new Font(font1.getName(),stytle1,font1.getSize()));
}
}
import java.awt.*;
import java.awt.event.*;
public class Item extends Frame implements ItemListener
{
private static final long serialVersionUID = 1L;
static Item frm=new Item();
static Checkbox cb1=new Checkbox("粗体");
static Checkbox cb2=new Checkbox("斜体",true);
static Checkbox cbg1=new Checkbox("红色",true);
static Checkbox cbg2=new Checkbox("蓝色");
static TextArea ta=new TextArea("选项事件类ItemEvent的使用方法");
public static void main(String args[])
{
frm.setLayout(new FlowLayout(FlowLayout.LEFT));
frm.setBounds(100, 100, 400, 300);
frm.add(cb1);
frm.add(cb2);
frm.add(cbg1);
frm.add(cbg2);
frm.add(ta);
cb1.addItemListener(frm);
cb2.addItemListener(frm);
cbg1.addItemListener(frm);
cbg2.addItemListener(frm);
CheckboxGroup grp=new CheckboxGroup();
cbg1.setCheckboxGroup(grp);
cbg2.setCheckboxGroup(grp);
ta.setForeground(Color.red);
frm.setVisible(true);
Font f1=ta.getFont();
ta.setFont(new Font(f1.getName(),Font.ITALIC,f1.getSize()));//放在这里就正常了
}
public void itemStateChanged(ItemEvent e)
{
Checkbox cb=(Checkbox) e.getSource();
Font font1=ta.getFont();
int stytle1=font1.getStyle();
if(cb==cbg1) ta.setForeground(Color.red);
else if(cb==cbg2) ta.setForeground(Color.blue);
else if((cb==cb1)||(cb==cb2))
{
if(cb==cb1) stytle1=stytle1^1;
else if(cb==cb2) stytle1=stytle1^2;
}
ta.setFont(new Font(font1.getName(),stytle1,font1.getSize()));
}
}
原本的代码运行时报空指针错误,f1为null
猜测是frm没有显示,所以testarea并没有完全初始化好,所以Font f1=ta.getFont();拿到的是null
PS:不修改getFont的顺序,把TextArea改成JTextArea类就正常了。奇怪,JTextArea和TextArea的初始化方法不一样嘛- -
----------------解决方案--------------------------------------------------------
求真相,到底是什么原因。。。
----------------解决方案--------------------------------------------------------