0

私のコードに新しい問題が見つかったようです。私のコードには (目に見える) エラーはありませんが、まだフレームが表示されません。助けてください

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class hello{
//Int's and things
static JButton Play = new JButton("<PLAY>");
static JFrame pane = new JFrame("CIrCUT 0.0.2");
static JLabel Title = new JLabel("CIrCUT");
static JLabel none = new JLabel(" ");
static JPanel panel = new JPanel(new GridLayout(10,10,10,10));
static JButton Options = new JButton("<OPTIONS>");
static JPanel panel2 = new JPanel(new GridLayout(10,10,10,10));
static String b[]  = new String[3];
static int panelLoct =1;
JComboBox optionlist = new JComboBox();


    void initialize(){
    b[0] = "High";
    b[1] = "Medium";
    b[2] = "Low";

    //title
    pane.setTitle("CIrCUT 0.0.2");
    //drop down

    optionlist .setModel(new DefaultComboBoxModel(new String[] {"Option", "High", "Medium",  "Low"}));
    optionlist.setSelectedIndex(3);
    optionlist.addActionListener((ActionListener) this);
    //other pane-related things
    if(panelLoct==1){
    pane.setLayout(new GridLayout(10,10));
    panel.setMaximumSize(new Dimension(500,500));
    pane.setSize(500,500);
    pane.setMaximumSize(new Dimension(500,500));
    panel.add(Title);
    panel.add(none);
    panel.add(Play);
    panel.add(Options);
    panel2.add(optionlist);
    Play.setSize(new Dimension(500,450));
    pane.setLocation(500,50);
    pane.setBackground(Color.lightGray);
    pane.setContentPane(panel);
    pane.pack();
    pane.setMinimumSize(new Dimension(500,500));
    pane.setContentPane(panel);
    OptionButtonHandler cbHandler = new OptionButtonHandler();
    Options.addActionListener(cbHandler);
    pane.setVisible(true);
    }
}
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
     private static class OptionButtonHandler implements ActionListener

         {
             public void actionPerformed(ActionEvent e){
                 pane.remove(panel);
                 pane.add(panel2);
             }
         }
     public void actionPerformed(ActionEvent e) {
            JComboBox cb = (JComboBox)e.getSource();
            cb.getSelectedItem();
     }

public static void main(String args[])
{
    hello a = new hello();
    a.initialize();
}
}

どんな助けでも大歓迎です。ここに私がそれを実行しようとしたときに私が得るエラーがあります

Exception in thread "main" java.lang.ClassCastException: hello cannot be cast to java.awt.event.ActionListener
    at hello.initialize(hello.java:39)
    at hello.main(hello.java:83)

おそらく初心者の間違いですが、解決方法については何も見つかりませんでした。

4

3 に答える 3

3

プログラムに、正確に失敗している場所に目に見えるエラーがあります。

optionlist.addActionListener((ActionListener) this);

thisのインスタンスへの参照ですhellohelloクラスは実装されていません。ではActionListener、そのキャストが成功するとどのように期待できますか?

ActionListenerあなたが与えた唯一の実装はOptionButtonHandler. おそらくあなたは次のことを意味しました:

optionlist.addActionListener(new OptionButtonHandler());

?

于 2013-02-28T22:26:06.687 に答える
2
    optionlist.addActionListener((ActionListener) this);

あなたが何かをしたいからといって、それが可能であるとは限りません。この場合、は でhelloはないためActionListener、これは失敗します。

キャストしている場合は、問題がある可能性があります。

于 2013-02-28T22:26:16.897 に答える
0

ActionListener を実装する必要があります。

public class Hello implements ActionListener{ 

}
于 2013-02-28T22:28:55.357 に答える