java se-java GUI 的一个问题

问题描述

java GUI 的一个问题

初学者,在写一个GUI , 设置了几个按钮和对应的几个ActiveListener,监听器(MyFrame内部类),MyFrame设置了一个成员变量flag,初值为0,重写了监听器方法,希望改变flag的值,但是在MyFrame中测试,flag一直为初值0,纠结很久了 万分感谢

解决方案

贴个完整带码看看看看看。

解决方案二:

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Test {
public static void main(String[] args) {
new MyFrame("my java");

}

}

class MyFrame extends Frame {

int flag = 0;
MyFrame(String s) {
    super(s);
    setBounds(200,300,700,400);
    setLayout(new BorderLayout());

    Panel p1 = new Panel(new GridLayout());
    Panel p2 = new Panel(new BorderLayout());
    Panel p3 = new Panel(new FlowLayout());

  Button b1 = new Button("堆栈");
  b1.addActionListener(new MonitorSelect1(this));
  System.out.println(flag);
    Button b2 = new Button("队列");
    b2.addActionListener(new MonitorSelect2(this));
    Button b3 = new Button("串");
    b3.addActionListener(new MonitorSelect3(this));
  Button b4 = new Button("递归");
  b4.addActionListener(new MonitorSelect4(this));
    Button b5 = new Button("树");
    b5.addActionListener(new MonitorSelect5(this));

    BufferedReader br = null;
    String str = null;
    TextArea ta = new TextArea();
    Label l1 = new Label("代码区");
    Label l2 = new Label("功能区");
    Label ru = new Label("入队数据");
    TextField num1 = new TextField(10);
    Button sure = new Button("确定");
    Label chu = new Label("出队数据");
    TextField num2 = new TextField(10);

    p1.add(b1);
    p1.add(b2);
    p1.add(b3);
    p1.add(b4);
    p1.add(b5);
    add(p1,BorderLayout.NORTH);
    p2.add(l1,BorderLayout.NORTH);
    p2.add(ta,BorderLayout.CENTER);
    p2.add(l2,BorderLayout.SOUTH);
    add(p2,BorderLayout.CENTER);
    p3.add(ru);
    p3.add(num1);
    p3.add(sure);
    p3.add(chu);
    p3.add(num2);
    add(p3,BorderLayout.SOUTH);

    /*try {
         br = new BufferedReader(new FileReader("F:/java/TestBuffered/TestBuffered1.txt"));
         while((str = br.readLine()) != null)   {
            ta.append(str+"
");
         }
    }
    catch (IOException e) {
        System.out.println("文件读取错误");
    }*/

    pack();
    setVisible(true);
}

class MonitorSelect1 implements ActionListener {
    MyFrame mf = null;
    MonitorSelect1(MyFrame mf) {
        this.mf = mf;
    }
    public void actionPerformed(ActionEvent e) {
        mf.flag = 1;
    }
}

class MonitorSelect2 implements ActionListener {
    MyFrame mf = null;
    MonitorSelect2(MyFrame mf) {
        this.mf = mf;
    }
    public void actionPerformed(ActionEvent e) {
        mf.flag = 2;
    }
}

class MonitorSelect3 implements ActionListener {
    MyFrame mf = null;
    MonitorSelect3(MyFrame mf) {
        this.mf = mf;
    }
    public void actionPerformed(ActionEvent e) {
        mf.flag = 3;
    }
}

class MonitorSelect4 implements ActionListener {
    MyFrame mf = null;
    MonitorSelect4(MyFrame mf) {
        this.mf = mf;
    }
    public void actionPerformed(ActionEvent e) {
        mf.flag = 4;
    }
}

class MonitorSelect5 implements ActionListener {
    MyFrame mf = null;
    MonitorSelect5(MyFrame mf) {
        this.mf = mf;
    }
    public void actionPerformed(ActionEvent e) {
        mf.flag = 5;
    }
}

}

解决方案三:

Java序列化的一个问题

解决方案四:

public class Test1 {
public static void main(String[] args) {
new MyFrame("my java");

}

}

class MyFrame extends Frame {
int flag = 0;
MyFrame(String s) {
super(s);
Button b = new Button();
b.addActionListener(new Monitor(this));
System.out.println(flag);
}

class Monitor implements ActionListener {
        MyFrame mf = null;
        Monitor(MyFrame mf) {
            this.mf = mf;
        }
        public void actionPerformed(ActionEvent e) {
            mf.flag = 3;
        }
    }
}

大概就是这样的

解决方案五:

代码里的System.out.println(flag);是在监听器触发之前输出的,应该在监听器里面写System.out.println(flag);

解决方案六:

flag,应该改成静态的,我之前也遇到过这样的问题。

解决方案七:

flag改成静态的就行~

时间: 2024-10-07 12:30:08

java se-java GUI 的一个问题的相关文章

让界面更加绚丽 Java SE 6.0 GUI体验

Java是一种非常强大的编程语言,但Java的GUI能力一直是它的软肋.虽然Java提供2种图形解决方案,AWT和Swing.但这2种图形库的功能十分有限,使用它们并不能带来更多的用户体验.而且AWT和Swing的更新速度很慢.一直到Java SE 5也没什么明显的变化.幸好Java SE 6终于为它们增加了更强大的功能.有了这些功能,使用AWT和Swing设计的用户界面可以更贴近用户.为了使读者能够更早地体验Java SE 6 GUI的美丽,本文将就Java SE 6 GUI提供的主要功能进行

Java SE 6之GUI:让界面更加绚丽(上)

本文为原创,如需转载,请注明作者和出处,谢谢! 本文曾发表于天极网:http://dev.yesky.com/185/2690685.shtml Java SE 6之GUI:让界面更加绚丽(下) Java是一种非常强大的编程语言,但Java的GUI能力一直是它的软肋.虽然Java提供2种图形解决方案,AWT和Swing.但这2种图形库的功能十分有限,使用它们并不能带来更多的用户体验.而且AWT和Swing的更新速度很慢.一直到Java SE 5也没什么明显的变化.幸好Java SE 6终于为它们

用Java SE 6.0实现高质量桌面集成开发

提要:本文将以具体的实例向你展示Java SE 6在桌面开发中所提供的一系列优秀特征. 一. 引言 随着Java SE 6 Beta的发行,Java开发者再也不需要自己去实现Java本机接口(JNI)便可以在其应用程序中加入桌面产品所具有的特征.这些桌面集成特征现在已成为内核的一个组成部分. 最新的Java标准版本6.0(代码名为Mustang)将在功能上进行一系列的改进--开发者们能够方便地用Java处理安全,JMX,操作系统文件,国际化和桌面开发等一系列问题.Sun在开发这个版本的过程中表现

Java SE 6 新特性: HTTP 增强

2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Mustang 在性能方面有了不错的提升.与 Tiger 在 API 库方面的大幅度加强相比,虽然 Mustang 在 API 库方面的新特性显得不太多,但是也提供了许多实用和方便的功能:在脚本,WebService,XML,编译器 API,数据库,JMX,网络和 Instrumentation 方面都有不错

Java SE 6新特性: XML API与Web服务

2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Mustang 在性能方面有了不错的提升.与 Tiger 在 API 库方面的大幅度加强相比,虽然 Mustang 在 API 库方面的新特性显得不太多,但是也提供了许多实用和方便的功能:在 脚本,XML 和 Web 服务,编译器 API,数据库,JMX,网络 和 Instrumentation 方面都有不错

java ME、java SE和java EE的区别

作者:啃刀手 链接:https://www.zhihu.com/question/31455874/answer/63915653 来源:知乎 著作权归作者所有,转载请联系作者获得授权. Java SE(Java Platform,Standard Edition),应该先说这个,因为这个是标准版本. Java EE (Java Platform,Enterprise Edition),java 的企业版本 Java ME(Java Platform,Micro Edition),java的微型

Java SE 6之GUI:让界面更加绚丽(下)

本文为原创,如需转载,请注明作者和出处,谢谢! Java SE 6之GUI:让界面更加绚丽( 上) 在上一篇中我介绍了Java SE 6在GUI上的部分改进.在这篇 文章中我接着介绍另外几种新的GUI功能.这些功能是: 1.  带有排序和过滤功能的JTable. 2.  增强的JTabbedPane组件 3.  增强的打印功能 4.  增强的拖放功能 一.带有排序和过滤功能的JTable.     在Java SE 6中除了 java.awt被更新外,javax.swing同时也有了很大的改进.

Java SE 6在Solaris的可观察性特征分析

Java平台标准版(Java SE)6,代码名为"Mustang",是最新的Java SE发行版本(正在开发中).Java SE 6源码和二进制代码都可以在www.Java.net上下载.Java SE 6平台要到2006年秋天才能正式发布.不过,现在你可以下载试用Java SE 6 Beta版. Java SE 6平台中提供了多种可观察性(observability)工具,这其中的许多工具都可在系统中运行,而这些工具中的只有极少数被用于挂起进程或核心复制处理.因此,在本文中,我们将分

Java SE 6中的AWT模态增强功能

一. 引言 模态一直是我最喜欢的话题之一,至少因为一直存在大量的感兴趣的客户的有关于这方面内容的回馈信息.作为一个Java SE测试工程师,这正是驱动我工作的动力-它使我一直处于忙碌之中,而且还为我的工作带来快乐.另一方面,这也说明了模态是客户端最广为使用的特征之一,不管是使用Swing还是使用AWT进行开发. 在Java SE 6(代码名为Mustang)中,我的工作变得更有意思--在模态方面进行大量的改进.这些改进将为应用程序开发者提供更大的灵活性--在设计可能用到模态对话框行为的程序的过程