package untitled3;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Frame1 extends JFrame {
    public Frame1() {
        setTitle("ActionTest");
        setSize(400,300);
     MulticastPanel x=new MulticastPanel();
        getContentPane().add(x);
    }
    public static void main(String[] args) {
        Frame1 frame4 = new Frame1();
        frame4.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame4.setVisible(true);
    }
}
class MulticastPanel extends JPanel{
    public MulticastPanel(){
   JButton  newButton=new JButton("new");
    this.add(newButton);
    final JButton closeAllButton=new JButton("Close all");
    this.add(closeAllButton);
   ActionListener  newListener=new f(closeAllButton);
   //cannot find symbol:classf.location:class untitled3.MulticastPanel ?
   class f implements ActionListener{
        private final JButton b;
        public f(final JButton s){
        this.b=s;
        }
        public void actionPerformed(ActionEvent event){
     BlankFrame frame=new BlankFrame(b);
     //cannot findsymbol:constructor BlankFrame(javax.swing).JButton).location:class untitled3.BlandFrame?
     //internal error:cannot instantiate untitled3.BlankFrame.<init>at untitled3.BlankFrame to()?
         frame.setVisible(true);
     } 
}   newButton.addActionListener(newListener);

}
class BlankFrame extends JFrame {
private ActionListener closeListener;
public static final int SPACING=40;
private static  int counter=0;
public BlankFrame(final Button closeButton){
counter++;
setTitle("Frame"+counter);
setSize(400,300);
setLocation(SPACING*counter,SPACING*counter);
closeListener=new ActionListener(){
public void actionPerformed(ActionEvent event){
closeButton.removeActionListener(closeListener);
dispose();
    }
   };
closeButton.addActionListener(closeListener);
}
}
在外部内中怎么构造内部类的对象?
为什么内部类中为什么不能构造同一个文件中的其他的类的对象
如果
a 继承 b
b 继承 c
那么 c  z=new a()  这样行吗?

解决方案 »

  1.   

    BlankFrame frame=new BlankFrame(b);
    ActionListener  newListener=new f(closeAllButton);
    这二句代码报错
    高手解释下
    不胜感激
      

  2.   

    package test;import java.awt.Button;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class Frame1 extends JFrame {
    public Frame1() {
    setTitle("ActionTest");
    setSize(400, 300);
    MulticastPanel x = new MulticastPanel();
    getContentPane().add(x);
    } public static void main(String[] args) {
    Frame1 frame4 = new Frame1();
    frame4.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame4.setVisible(true);
    }
    }class MulticastPanel extends JPanel {

    public MulticastPanel() {
    JButton newButton = new JButton("new");
    this.add(newButton);
    final JButton closeAllButton = new JButton("Close all");
    this.add(closeAllButton);
    ActionListener newListener = new f(closeAllButton);
    // cannot find symbol:classf.location:class untitled3.MulticastPanel ?
    newButton.addActionListener(newListener);
    }

    class f implements ActionListener {
    private final JButton b; public f(final JButton s) {
    this.b = s;
    } public void actionPerformed(ActionEvent event) {
    BlankFrame frame = new BlankFrame(b);
    // cannot findsymbol:constructor
    // BlankFrame(javax.swing).JButton).location:class
    // untitled3.BlandFrame?
    // internal error:cannot instantiate
    // untitled3.BlankFrame.<init>at untitled3.BlankFrame to()?
    frame.setVisible(true);
    }
    }
    }class BlankFrame extends JFrame {
    private ActionListener closeListener; public static final int SPACING = 40; private static int counter = 0; public BlankFrame(final JButton closeButton) {
    counter++;
    setTitle("Frame" + counter);
    setSize(400, 300);
    setLocation(SPACING * counter, SPACING * counter);
    closeListener = new ActionListener() {
    public void actionPerformed(ActionEvent event) {
    closeButton.removeActionListener(closeListener);
    dispose();
    }
    };
    closeButton.addActionListener(closeListener);
    }
    }
      

  3.   

    1.非静态方法里是不能写类的,拿出来就行了
    2.JButton和Button的关系:
      Component->Button
      Component->Container->JComponent->AbstractButton->JButton
      

  4.   

    public BlankFrame(final JButton closeButton) {}->这个方法的参数类型改成JButton
      

  5.   

    第一个问题又看了一下 应该和类的装载顺序有关系 如果要放在方法里的话 就写在new的前面吧
      

  6.   

    不是那个问题吧
    如果是那样的话下面一句就不会报错了
    我用的是jdk1.4这个题目本来是5。0上的一个例子我改了下