java内部类的问题

s74110s 2007-06-06 03:13:15
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() 这样行吗?
...全文
292 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
s74110s 2007-06-07
  • 打赏
  • 举报
回复
不是那个问题吧
如果是那样的话下面一句就不会报错了
我用的是jdk1.4这个题目本来是5。0上的一个例子我改了下
danielluo 2007-06-06
  • 打赏
  • 举报
回复
第一个问题又看了一下 应该和类的装载顺序有关系 如果要放在方法里的话 就写在new的前面吧
danielluo 2007-06-06
  • 打赏
  • 举报
回复
public BlankFrame(final JButton closeButton) {}->这个方法的参数类型改成JButton
s74110s 2007-06-06
  • 打赏
  • 举报
回复
不是吧
非静态方法也可写类吧
那个临听器拿出来.不会报错了.可是里面的第二句还是报错
为什么?????????????
danielluo 2007-06-06
  • 打赏
  • 举报
回复
1.非静态方法里是不能写类的,拿出来就行了
2.JButton和Button的关系:
Component->Button
Component->Container->JComponent->AbstractButton->JButton
danielluo 2007-06-06
  • 打赏
  • 举报
回复
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);
}
}
s74110s 2007-06-06
  • 打赏
  • 举报
回复
BlankFrame frame=new BlankFrame(b);
ActionListener newListener=new f(closeAllButton);
这二句代码报错
高手解释下
不胜感激

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧