刚开始学java,关于Java对象的创建,求助大神

Mr_GoodMood 2019-02-16 06:13:32
Java怎么在当前中调用当前类的对象,具体的是我在一个窗体类中创建了一个按钮,该按钮的功能是点击之后会弹出一个对话框,且对话框弹出之后会阻塞主窗体。
但是在实现这个的时候。使用对话框窗体的父类JDialog的构造方法
 super(frame,"标题",true)
的时候,发现如果在父类的构造方法中对按钮添加事件监听。
btn.addActionListener(new AbstractAction() {//给按钮添加事件监听
@Override
public void actionPerformed(ActionEvent e) {
Demo1 demo1=new Demo1();//创建父对象
new JDialog2(demo1);
}
});[code=java]

这样它又执行了一次构造方法;所以又多了一个窗口。然后我试着在main函数中给它添加事件监听。
    static class Test{
public static void main(String[] args){
// new Demo1();
Demo1 demo1=new Demo1();
demo1.btn.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
new JDialog2(demo1);
}
});
}
}

这样倒是不会弹两个窗口了 ,那么想问问像这样的怎么在父类的构造方法中对按钮添加事件监听。同时
new JDialog2(demo1);
这里的父窗口对象不new它,不让他再次弹窗。可不可以不用new来创建对象?
附上代码:


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class Demo1 extends JFrame {
private Demo1 demo1;
JButton btn;
// Demo1 demo1=new Demo1();//
public Demo1(){
setBounds(100,100,100,100);//设置窗体属性
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c=getContentPane();//获取容器
c.setLayout(new BorderLayout());//容器布局
btn= new JButton("按一下弹出对话框");
// btn.addActionListener(new AbstractAction() {//给按钮添加事件监听
// @Override
// public void actionPerformed(ActionEvent e) {
// Demo1 demo1=new Demo1();
// new JDialog2(demo1);
// }
// });
c.add(btn);//添加按钮

setVisible(true);
}
static class Test{
Demo1 demo1;
public static void main(String[] args){
// new Demo1();
Demo1 demo1=new Demo1();
demo1.btn.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
new JDialog2(demo1);
}
});
}
}
}
class JDialog2 extends JDialog {//对话框类
public JDialog2(Frame frame) {//调用时传入父窗体对象
super(frame, "对话框", true);//我希望对话框弹出后阻塞父窗体
setSize(200, 140);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
Container container = getContentPane();
container.add((new JLabel("这是一个对话框")), BorderLayout.CENTER);
setVisible(true);
}
}


...全文
570 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
luj_1768 2019-02-22
  • 打赏
  • 举报
回复
阻塞主窗体?这个需求比较有意思。一般情况下使用messageBox 会有这个效果,使用其他的对话框可能做不到这个效果。你真的确定阻塞主窗体这个需求很重要么?
logic923 2019-02-21
  • 打赏
  • 举报
回复
初学者都这恶么强了,,,哎
闪电领主 2019-02-20
  • 打赏
  • 举报
回复
引用 5 楼 qq_37666892的回复:
谢谢提醒,已经学完了,按照书本大纲刷下来的。
请问会盗号么,价钱好商量
:: 2019-02-19
  • 打赏
  • 举报
回复
引用 3 楼 yn_leopard 的回复:
只想说,工作了N多年,除了在教科书上看到,awt和swing的东西在现实中基本没用过。

我都是直接跳过这一部分的
Mr_GoodMood 2019-02-16
  • 打赏
  • 举报
回复
已解决,突然想到了,用 类名.this 就行了,用this关键字
Mr_GoodMood 2019-02-16
  • 打赏
  • 举报
回复
刚刚突然想起来可以用 类名.this 就行了,this关键字的一个用法。谢谢
Mr_GoodMood 2019-02-16
  • 打赏
  • 举报
回复
谢谢提醒,已经学完了,按照书本大纲刷下来的。
不良人天银星 2019-02-16
  • 打赏
  • 举报
回复
可以用反射实例化的方式来创建一个对象,getinstance吧好像,具体我也不太记得了
yn_leopard 2019-02-16
  • 打赏
  • 举报
回复
只想说,工作了N多年,除了在教科书上看到,awt和swing的东西在现实中基本没用过。
Mr_GoodMood 2019-02-16
  • 打赏
  • 举报
回复
有人吗?有没有那个大神解答一下

62,626

社区成员

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

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