本人想在窗体设计四个说明颜色的复选框,点击后,面板绘画出相应颜色的字体,可是测试时点击没反应,请各位高手指点一下.
代码如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class FontColor extends JFrame {
    Pane p=new Pane();
    JCheckBox Red=new JCheckBox("红色");
JCheckBox Green=new JCheckBox("绿色");
JCheckBox Blue=new JCheckBox("蓝色");
JCheckBox Gray=new JCheckBox("灰色");
    GridLayout gridLayout2 = new GridLayout();
    static char c;
    public FontColor() {
        JPanel c=(JPanel) this.getContentPane();        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        c.add(p);
    }    private void jbInit() throws Exception {
        p.setLayout(gridLayout2);
        gridLayout2.setColumns(1);
        gridLayout2.setRows(4);
        Red.addItemListener(new MyItemListener());
        Green.addItemListener(new MyItemListener());
        Blue.addItemListener(new MyItemListener());
        Gray.addItemListener(new MyItemListener());
        this.setCursor(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        Red.addActionListener(new FontColor_Red_actionAdapter(this));
        p.add(Red);
        p.add(Green);
        p.add(Blue);
        p.add(Gray);
    }
public class MyItemListener implements ItemListener{
    public void itemStateChanged(ItemEvent ie){
     if(ie.getItem().equals(Red)){
         c='r';
         p.repaint();
     }
     if(ie.getItem().equals(Green)){
         c='g';
         p.repaint();
     }
     if(ie.getItem().equals(Blue)){
         c='b';
         p.repaint();
     }
     if(ie.getItem().equals(Gray)){
         c='a';
         p.repaint();
     }
        }}
    public class Pane extends JPanel{
        public Pane(){        }public void paintComponent(Graphics g){
    Font f=new Font("Georgia",Font.PLAIN ,40);
FontMetrics fm=getFontMetrics(f);
    String s;    switch(c){
    case 'r':
        s="红色";
        g.setColor(Color.red );
        g.setFont(f);                  //更改了字体后,g要重新设置字体***
        g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
        break;
    case 'g':
        s="绿色";
        g.setColor(Color.green  );
        g.setFont(f);                  //更改了字体后,g要重新设置字体***
        g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
        break;
    case 'b':
        s="蓝色";
        g.setColor(Color.blue  );
        g.setFont(f);                  //更改了字体后,g要重新设置字体***
        g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
        break;
    case 'a':
        s="灰色";
        g.setColor(Color.gray );
        g.setFont(f);                  //更改了字体后,g要重新设置字体***
        g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
        break;    }
}
    }
    public static void main(String args[]){
        FontColor fc=new FontColor();
        fc.setSize(600,400);
        fc.show();
    }
}

解决方案 »

  1.   

    FontColor_Red_actionAdapter这个类的代码呢?
      

  2.   

    public class MyItemListener implements ItemListener{ 
        public void itemStateChanged(ItemEvent ie){ 
         if(ie.getItem().equals(Red)){ 
             c= 'r '; 
             p.repaint(); 
         } 
         if(ie.getItem().equals(Green)){ 
             c= 'g '; 
             p.repaint(); 
         } 
         if(ie.getItem().equals(Blue)){ 
             c= 'b '; 
             p.repaint(); 
         } 
         if(ie.getItem().equals(Gray)){ 
             c= 'a '; 
             p.repaint(); 
         } 
            }
    改为如下形式 
    if(ie.getItem().equals("Red"));...下同
    你应该匹配字符串
      

  3.   

    终于看到了一点点东西,想要看到效果,改一个地方可以.
    private void jbInit() throws Exception { 
            //p.setLayout(gridLayout2); //去掉这句看看吧.
            gridLayout2.setColumns(1); 
            gridLayout2.setRows(4); 
            Red.addItemListener(new MyItemListener()); 
            Green.addItemListener(new MyItemListener()); 
            Blue.addItemListener(new MyItemListener()); 
            Gray.addItemListener(new MyItemListener()); 
            this.setCursor(null); 
            this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
             
            Red.addActionListener(new FontColor_Red_actionAdapter(this)); 
            p.add(Red); 
            p.add(Green); 
            p.add(Blue); 
            p.add(Gray); 
        } 
      

  4.   

    字体的问题啦
    import java.awt.*; 
    import javax.swing.*; 
    import java.awt.event.*; 
    import javax.swing.event.*; 
    public class FontColor extends JFrame { 
        Pane p=new Pane(); 
        JCheckBox Red=new JCheckBox("红色"); 
    JCheckBox Green=new JCheckBox("绿色"); 
    JCheckBox Blue=new JCheckBox("蓝色"); 
    JCheckBox Gray=new JCheckBox("灰色"); 
        GridLayout gridLayout2 = new GridLayout(); 
        static char c; 
        public FontColor() { 
            JPanel c=(JPanel) this.getContentPane();         try { 
                jbInit(); 
            } catch (Exception ex) { 
                ex.printStackTrace(); 
            } 
            c.add(p); 
        }     private void jbInit() throws Exception { 
            //p.setLayout(gridLayout2); 
            gridLayout2.setColumns(1); 
            gridLayout2.setRows(4); 
            Red.addItemListener(new MyItemListener()); 
            Green.addItemListener(new MyItemListener()); 
            Blue.addItemListener(new MyItemListener()); 
            Gray.addItemListener(new MyItemListener()); 
            this.setCursor(null); 
            this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
             
            //Red.addActionListener(new FontColor_Red_actionAdapter(this)); 
            p.add(Red); 
            p.add(Green); 
            p.add(Blue); 
            p.add(Gray); 
        } 
    public class MyItemListener implements ItemListener{ 
        public void itemStateChanged(ItemEvent ie){ 
         if(ie.getItem().equals(Red)){ 
             c= 'r'; 
             p.repaint(); 
         } 
         if(ie.getItem().equals(Green)){ 
             c= 'g'; 
             p.repaint(); 
         } 
         if(ie.getItem().equals(Blue)){ 
             c= 'b'; 
             p.repaint(); 
         } 
         if(ie.getItem().equals(Gray)){ 
             c= 'a'; 
             p.repaint(); 
         } 
            } } 
        public class Pane extends JPanel{ 
            public Pane(){         } public void paintComponent(Graphics g){ 
        Font f=new Font("宋体",Font.PLAIN ,40); 
    FontMetrics fm=getFontMetrics(f); 
        String s;     switch(c){ 
        case  'r': 
            s="红色"; 
            g.setColor(Color.red ); 
            g.setFont(f);                  //更改了字体后,g要重新设置字体*** 
            g.clearRect(0,0,1000,1000); 
    g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2); 
            break; 
        case  'g': 
            s="绿色"; 
            g.setColor(Color.green  ); 
            g.setFont(f);                  //更改了字体后,g要重新设置字体*** 
            g.clearRect(0,0,1000,1000); 
    g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2); 
            break; 
        case  'b': 
            s="蓝色"; 
            g.setColor(Color.blue  ); 
            g.setFont(f);                  //更改了字体后,g要重新设置字体*** 
            g.clearRect(0,0,1000,1000); 
    g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2); 
            break; 
        case  'a': 
            s="灰色"; 
            g.setColor(Color.gray ); 
            g.setFont(f);                  //更改了字体后,g要重新设置字体*** 
            g.clearRect(0,0,1000,1000); 
    g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2); 
            break;     } 

        } 
        public static void main(String args[]){ 
            FontColor fc=new FontColor(); 
            fc.setSize(600,400); 
            fc.show(); 
        } 
      

  5.   

    代码中还不能使用标签,晕了
    Font f=new Font("宋体",Font.PLAIN ,40); //把你代码中的那个地方改成这个
      

  6.   

    虽然效果不太好,但总算解决了问题,谢谢AWUSOFT!!!!!!!!
      

  7.   

    你去看看ie.getItem()返回的是什么东西啦
      

  8.   

    返回字符串啊
    Checkbox box=(Checkbox)e.getItemSelectable();
    if(box==red)

    if(e.getItem().equals("红色"));
    都可以啊。
    但是if(e.getItem().equals(Red));也可以么?为什么?
      

  9.   

    一般的来说啊equals方法首先就是判断是否this==obj的啊.
    你说了box==red,这个equals方法里第一行应该是这样的判断的if(this==obj)
    {
    return true;
    }if(e.getItem().equals("红色")); 你说的这可以???/你试过没有啊.,我试的怎么不行呢???全是false,人家返回的全是JCheckbox 对像,你拿过String去比较,难道JCheckbox 在覆盖equals()方法的会拿对像的标题去判断是否相同吗?
    public boolean equals(Object obj)
    {
    //....
      if(obj instanceof String)
      {
             if(this.getText().equals(obj))
             {
               return true;
             }
      }
    //.......
    }应该不会这样的吧
      

  10.   

    我试了下面的程序是可以的
    import java.awt.*;
    import java.awt.event.*;
    public class Test extends Frame implements ItemListener
    {
    Checkbox red;
    Checkbox blue;
    Test()
    {
    red=new Checkbox("红色");
    blue=new Checkbox("蓝色");
    red.addItemListener(this);
    blue.addItemListener(this);
    add(red,BorderLayout.NORTH);
    add(blue,BorderLayout.SOUTH);
    setBounds(200,200,100,100);
    addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }});
    setVisible(true);
    validate(); }
    public void itemStateChanged(ItemEvent e)
    {
    //if ((Checkbox)e.getItemSeletable()==red)
    if(e.getItem().equals("红色"))
    {
    System.out.println("你点了红色");
    }
    if(e.getItem().equals("蓝色"))
    {
    System.out.println("你点了蓝色");
    }
    }
    public static void main(String args[])
    {
    new Test();
    }
    }
      

  11.   

    我试了一个,你用Checkbox是可以的,但是JCheckBox就不行了.