package AWT;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComboBoxTest
{
    public static void main(String[] args)
    {
        ComboBoxFrame frame = new ComboBoxFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.show();
    }
}
class ComboBoxFrame extends JFrame
{
    private JComboBox faceCombo;
    private JLabel label;
    private static final int DEFAULT_SIZE = 12;
    public ComboBoxFrame()
    {
        setTitle("ComboBoxTest");
        setSize(300,300);
        Container contentPane = getContentPane();
        
        label =new JLabel("The quick brown fox jumps over the lazy dogs");
        label.setFont(new Font("serif",Font.PLAIN,DEFAULT_SIZE));
        contentPane.add(label,BorderLayout.CENTER);
        
        faceCombo = new JComboBox();
        faceCombo.setEditable(true);
        faceCombo.addItem("Serif");
        faceCombo.addItem("SansSerif");
        faceCombo.addItem("Monospaced");
        faceCombo.addItem("Dialog");
        faceCombo.addItem("DialogInput");
        
        String s=(String)faceCombo.getSelectedItem();
        //s.addDocumentListener(new Aa());
            
        JPanel comboPanel = new JPanel();
        comboPanel.add(faceCombo);
        contentPane.add(comboPanel, BorderLayout.SOUTH);
    }   private  class Aa implements javax.swing.event.DocumentListener
    {
                public void removeUpdate(javax.swing.event.DocumentListener e)
                {
                    label.setFont(new Font((String)faceCombo.getSelectedItem(),Font.PLAIN,DEFAULT_SIZE));
                }
                public void insertUpdate(javax.swing.event.DocumentListener e)
                {
                    label.setFont(new Font((String)faceCombo.getSelectedItem(),Font.PLAIN,DEFAULT_SIZE));
                }
                public void changedUpdate(javax.swing.event.DocumentListener e)
                {
                     label.setFont(new Font((String)faceCombo.getSelectedItem(),Font.PLAIN,DEFAULT_SIZE));
                }
    }
}大家看看这段代码哪错了,意思是那个ComboBox里的文本一改变就触发还有javax.swing.event.DocumentListener 为什么我光写DocumentListener就错了了,我已经import包了啊,晕了,高手指教啊,不胜感激

解决方案 »

  1.   

    指点一下几个错误:
    1 你的内部内 class Aa 都没有用
    2 你的几个实现DocumentListener接口的几个方法都写错了,参数不对
    3 你是要选择那个ComboBox来触发事件,因此要对faceCombo进行监听,即addActionListener
    4 你说javax.swing.event.DocumentListener 光写DocumentListener就错了?根本就没有import这个包,至少你贴上来的代码没有javax.swing.event这个包,不是javax.swing这个哦。
    5 frame.show()方法已经过时,请使用serVisible()方法。改正代码如下:
    ---------------------
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;public class ComboBoxTest {
    public static void main(String[] args) {
    ComboBoxFrame frame = new ComboBoxFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
    }class ComboBoxFrame extends JFrame implements ActionListener {
    private JComboBox faceCombo; private JLabel label; private static final int DEFAULT_SIZE = 12; public ComboBoxFrame() {
    setTitle("ComboBoxTest");
    setSize(300, 300);
    Container contentPane = getContentPane(); label = new JLabel("The quick brown fox jumps over the lazy dogs");
    label.setFont(new Font("serif", Font.PLAIN, DEFAULT_SIZE));
    contentPane.add(label, BorderLayout.CENTER); faceCombo = new JComboBox();
    faceCombo.setEditable(true);
    faceCombo.addItem("Serif");
    faceCombo.addItem("SansSerif");
    faceCombo.addItem("Monospaced");
    faceCombo.addItem("Dialog");
    faceCombo.addItem("DialogInput");
    faceCombo.addActionListener(this);//注意这里
    JPanel comboPanel = new JPanel();
    comboPanel.add(faceCombo);
    contentPane.add(comboPanel, BorderLayout.SOUTH);
    } public void actionPerformed(ActionEvent e) {//这里才是事件的处理函数
    label.setFont(new Font((String) faceCombo.getSelectedItem(),
    Font.PLAIN, DEFAULT_SIZE));
    }
    }
      

  2.   

    仔细看了楼上的解释 了解了很多啊
    现在我不想对faceCombo进行监听 因为我faceCombo.setEditable(true)后,我就可以在faceCombo的文本框里设置,可是我发现,我设置了后没效果,所以我现在想对faceCombo里的文本框的内容进行监听
      

  3.   

    看了你的指导  我又改了下代码 如下,可是还是不行,再麻烦你下
    package AWT;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    public class ComboBoxTest
    {
        public static void main(String[] args)
        {
            ComboBoxFrame frame = new ComboBoxFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.show();
        }
    }
    class ComboBoxFrame extends JFrame
    {
        private JComboBox faceCombo;
        private JLabel label;
        private static final int DEFAULT_SIZE = 12;
        public ComboBoxFrame()
        {
            setTitle("ComboBoxTest");
            setSize(300,300);
            Container contentPane = getContentPane();
            
            label =new JLabel("The quick brown fox jumps over the lazy dogs");
            label.setFont(new Font("serif",Font.PLAIN,DEFAULT_SIZE));
            contentPane.add(label,BorderLayout.CENTER);
            
            faceCombo = new JComboBox();
            faceCombo.setEditable(true);
            faceCombo.addItem("Serif");
            faceCombo.addItem("SansSerif");
            faceCombo.addItem("Monospaced");
            faceCombo.addItem("Dialog");
            faceCombo.addItem("DialogInput");
            
            String s=(String)faceCombo.getSelectedItem();
            s.addDocumentListener(new Aa());
                
            JPanel comboPanel = new JPanel();
            comboPanel.add(faceCombo);
            contentPane.add(comboPanel, BorderLayout.SOUTH);
        }   private  class Aa implements DocumentListener
        {
                    public void removeUpdate(DocumentEvent e)
                    {
                        label.setFont(new Font((String)faceCombo.getSelectedItem(),Font.PLAIN,DEFAULT_SIZE));
                    }
                    public void insertUpdate(DocumentEvent e)
                    {
                        label.setFont(new Font((String)faceCombo.getSelectedItem(),Font.PLAIN,DEFAULT_SIZE));
                    }
                    public void changedUpdate(DocumentEvent e)
                    {
                         label.setFont(new Font((String)faceCombo.getSelectedItem(),Font.PLAIN,DEFAULT_SIZE));
                    }
        }
    }
      

  4.   

    提示说这句 s.addDocumentListener(new Aa());出错
    可是就不明白了,还是不可以这样加监听器的呢?麻烦你了,谢谢
      

  5.   

    String s=(String)faceCombo.getSelectedItem();
    s.addDocumentListener(new Aa());
    -----------
    String类哪有这样的方法?当然通不过编译了?
    你的想法就是想对 JComboBox 的每个项添加相应,对不?那直接监听 JComboBox 就行了,对里面的每个内容添加监听器好像没有听过,我不会。
    再等等高手吧。