java基础学习GUI编程

学习Java GUI编程:example_browser教程 Java图形用户界面(GUI)编程是一个让开发者利用Java创建图形界面的过程,这些界面可以运行在各种平台上。Java的GUI组件被广泛应用于企业级应用、桌面应用和Web应用中,它们为最终用户提供了直观和交互式的服务。Swing是Java的一个用于开发图形用户界面(GUI)的工具包,它是Java基础类库的一部分。Swing提供了一组丰富的用户界面组件,这些组件可以用来构建跨平台的应用程序界面。 阅读详情

------- android培训、java培训、期待与您交流! ----------




 
    GUI(用户图形界面)


一、概述
1、GUI:GraphicalUser Interface,即图形用户界面,用于计算机与用户交互的一种方式。
2、计算机与用户交互的两种方式:GUI和CLI
        GUI: Graphical User Interface,图形用户接口,用图形方式,来显示计算机操作界面,方便直观。
        CLI: Command LineUser Interface,命令行用户接口,即常见的Dos命令行操作,须记住一些命令,操作不直观。
3、java也将这种界面封装为对象,其中的对象都放在了两个包中:java.Awt包和javax.Swing包。
        java.Awt包:Abstract Window Toolkit,即抽象窗口工具包。要调用本地系统方法实现功能,属重量级控件。
        javax.Swing包:在AWT的基础上建立的一套图形界面系统,其中提供了更多的组件,且完全由java实现,增强了移植性,属轻量级控


件。
 
二、继承关系
 
Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。
Container常用子类:Window   Panel(面板,不能单独存在。)
Window常用子类:Frame  Dialog
 
三、布局管理器
1、布局:容器中的组件排列方式
2、常见的布局管理器:
        1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
        2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。
        3)GridLayout:网格式布局管理器,规则的矩阵
        4)CardLayout:卡片式布局管理器,即选项卡
        5)GridBayLayout:网格包布局管理器,非规则矩阵
3、如果存在多种布局方式,如何创建窗体界面呢?步骤:
        1)先将窗体Frame进行大区域的划分,设置其布局管理器,加入面板Panel
        2)将组件加入Panel,设置面板的布局管理器。
 
四、简单的窗体创建过程
1、创建Frame窗体:
        Frame f = new Frame("my Frame");//可设置标题,即窗体名字
2、对窗体进行基本设置:如大小,位置,布局等:
        f.setSize(int wight,int hight);//窗体大小设置
        f.setLocation(int x,int y);//窗体显示位置设置,横纵坐标
        f.setBounds(int x,int y,int wight,int hight),也可以直接用这个方法对大小和位置设置
        f.setLayout(Layout layout),参数为指定的布局管理器,如FlowLayout
3、定义组件:
       如Button b = new Button(“my Button”);//可设置组件的名称
4、将组件通过窗体的add方法添加到窗体中:
        f.add(b);//将按钮组件添加进窗体
5、让窗体显示:
        f.setVisible(boolean b);//通过设置参数是true还是false是否显示窗体
示例:
import java.awt.*;  
  
class AwtFirstDemo   
{  
    public static void main(String[] args)   
    {  
        //创建Frame窗体:  
        Frame f = new Frame("my Frame");//可设置标题  
  
        //对窗体进行基本设置:如大小,位置,布局等:  
        f.setSize(500,100);//窗体大小设置  
        f.setLocation(300,150);//窗体显示位置设置,横纵坐标   
  
       // f.setBounds(int x,int y,int wight,int hight);//也可以直接用这个方法对大小和位置设置  
          
        f.setLayout(new FlowLayout());//参数为指定的布局管理器,如FlowLayout  
          
        //定义组件:  
        Button b = new Button("my Button");//可设置组件的名称  
          
        //将组件通过窗体的add方法添加到窗体中:  
        f.add(b);//将按钮组件添加进窗体  
          
        //让窗体显示:  
        f.setVisible(true);//通过设置参数是true还是false是否显示窗体  
    }  
}  
  
 


五、事件监听机制
1、组成:
        1)事件源(组件):awt或swing包中的那些图形界面组件
        2)事件(Event):每一个事件源都有自己特有的对应事件和共性事件
        3)监听器(Listener):将可触发某一事件的动作(不只一个动作),都封装到侦听器中。
        4)事件处理:引发事件后的处理方式。
 
2、使用说明
        组成的前三个在java中都已将定义好了,直接获取其对象来用即可,我们需要做的就是对产生的动作进行处理。
步骤:
        1)确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的


子类对象,或者XXXListener的子类XXXAdapter的子类对象。
        2)一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
如:
[java] view plaincopy
f.addWindowlistener(new WindowAdapter()  
{  
     public void windowClosing(WindowEvent e)  
     {  
          System.exit(0);//表示关闭窗口  
     }  
});  
3、适配器
        1)事件触发后会把事件打包成对象传递给复写方法中参数的变量。
        2)若用子类实现WindowListener接口,就需要覆盖其中的7个方法,可只用到其中的关闭动作,其他动作未用到,但却必须重写全部


。因为WindowLister的子类WindowAdapter(适配器)已经实现此接口,并覆盖了其中所有方法。那么只需继承WindowAdapter,覆盖需要的方


法即可。
        3)明确事件,并对事件进行处理,其实,添加什么监听器就需要添加什么事件。
示例:


/* 
需求:让窗体的关闭功能实现 
      让按钮也具备退出程序的功能 
*/  
  
import java.awt.*;  
import java.awt.event.*;  
  
class  AwtEventDemo  
{  
    //定义该图形界面所需的组件的引用  
    private Frame f=null;  
    private Button but=null;  
  
    //初始构造函数  
    AwtEventDemo()  
    {  
        init();  
    }  
  
    //窗体创建与功能实现  
    public void init()  
    {  
        //实例化组件  
        f=new Frame("my Frame");  
        but=new Button("my Botton");  
  
        //窗口的基本设置  
        //f.setSize(500,300);//设置大小  
        //f.setLocation(300,200);//窗口初始显示位置  
        f.setBounds(350,300,300,200);//一起设置窗体大小和位置  
        f.setLayout(new FlowLayout());//设置为流式布局  
  
        //将按钮组件添加进窗体  
        f.add(but);  
  
        //加载窗体上事件  
        myEvent();  
  
        //显示窗体  
        f.setVisible(true);  
  
    }  
  
    //注册事件  
    private void myEvent()  
    {  
        //窗体的关闭功能  
        f.addWindowListener(new WindowAdapter()  
        {  
            public void windowClosing(WindowEvent e)  
            {  
                System.out.println("窗口关闭");  
                System.exit(0);//关闭窗口程序  
            }  
        });  
  
        //让按钮具备退出程序的功能  
        /* 
        按钮就是事件源。 
        那么选择哪个监听器呢? 
        通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。 
        需要查看该组件对象的功能。 
         通过查阅button的描述。发现按钮支持一个特有监听addActionListener。 
         */  
        but.addActionListener(new ActionListener()  
        {  
            public void actionPerformed(ActionEvent e)  
            {  
                System.out.println("按钮控制窗口关闭");  
                System.exit(0);//关闭窗口程序  
            }  
        });  
    }  
  
    public static void main(String[] args)   
    {  
        //运行窗体程序  
        new AwtEventDemo();  
    }  
}  
练习: 


/* 
共性事件:键盘事件和鼠标事件 
 
需求:在窗体中列出指定目录内容 
*/  
import java.awt.*;  
import java.awt.event.*;  
import java.io.*;  
  
class KeyAndMouseEvent   
{  
    //全局变量的界面组件引用  
    private Frame f;  
    private Button but;  
    private TextField tf;  
    private TextArea ta;  
  
    //构造函数  
    KeyAndMouseEvent()  
    {  
        init();  
    }  
  
    //窗体创建与功能实现  
    public void init()  
    {  
        //组件实例化  
        f=new Frame("my fame");  
        but=new Button("跳转");  
        tf=new TextField(50);  
        ta=new TextArea(30,58);  
  
        //窗体基本设置  
        f.setBounds(300,150,500,500);  
        f.setLayout(new FlowLayout());  
  
        //添加组件  
        f.add(tf);  
        f.add(but);  
        f.add(ta);  
  
        //窗体事件  
        myEvent();  
          
        //窗体显示  
        f.setVisible(true);  
    }  
  
    //注册事件  
    public void myEvent()  
    {  
        //窗体关闭功能  
        f.addWindowListener(new WindowAdapter()  
        {  
            public void windowClosing(WindowEvent e)  
            {  
                System.exit(0);  
            }  
        });  
  
        /* 
        //鼠标活动事件 
        but.addActionListener(new ActionListener() 
        { 
            public void actionPerformed(ActionEvent e) 
            { 
                System.out.println("按钮在动");  
            } 
        }); 
        */  
  
        //鼠标事件  
        but.addMouseListener(new MouseAdapter()  
        {  
            //int count=0;  
            public void mouseClicked(MouseEvent e)  
            {  
            //  if(e.getClickCount()==2)  
            //      System.out.println("鼠标双击按钮");  
  
            //  System.out.println("鼠标单击按钮");  
                //System.exit(0);  
  
                showFile();//显示到文本区中  
            }  
            /* 
            public void mouseEntered(MouseEvent e) 
            { 
                System.out.println("鼠标放进入按钮范围"+(++count)+"次"); 
            } 
            */  
        });  
  
        /* 
        //按钮键盘事件 
        but.addKeyListener(new KeyAdapter() 
        { 
            public void keyPressed(KeyEvent e) 
            { 
                //捕获同时按下ctrl+entry 
                if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER) 
                    System.out.println("Ctrl+Enter.....is Down"); 
                 
                //System.out.println(e.getKeyText(e.getKeyCode())+"---"+e.getKeyCode());     
            } 
        }); 
        */  
  
        //文本框键盘事件  
        tf.addKeyListener(new KeyAdapter()  
        {  
            public void keyPressed(KeyEvent e)  
            {  
                /* 
                //判断输入字符是否是数字 
                if(e.getKeyCode()<KeyEvent.VK_0||e.getKeyCode()>KeyEvent.VK_9) 
                { 
                    System.out.println("你输入的数字非法,请重数"); 
                    e.consume();//不显示输入的字符 
                } 
                */  
  
                if(e.getKeyCode()==KeyEvent.VK_ENTER)  
                    showFile();//将目录下的内容显示到文本区中  
            }  
        });  
    }  
  
    //将路径下的目录或文件列出  
    private void showFile()  
    {  
        String path=tf.getText();//获取文本框内容  
        File file=new File(path);//将路径封装成文件对象  
        //判断是否存在  
        if(file.exists())  
        {  
            ta.setText("");//清空文本区中的内容  
            //如果是目录  
            if(file.isDirectory())  
            {  
                String[] dir=file.list();//列出目录下的文件和目录  
                //遍历  
                for (String name : dir)  
                {  
                    ta.append(name+"\r\n");//添加到文本区中  
                }  
            }  
            else  
                ta.append(file.getName());//如果是文件,则只显示该文件的名字  
        }  
        else  
            System.out.println("您输入的路径不存在,请重输或者去医院");  
    }  
      
  
    public static void main(String[] args)   
    {  
        //运行窗体  
        new KeyAndMouseEvent();  
    }  
}  
 
    GUI应用


一、对话框:Dialog
        何时需要产生对话框:此对象时需要在调用时,才创建对象。如:当在误操作的时候,就需要出现提示错误信息的对话框,此时才创


建的这个对象。
示例:
        对列出指定目录内容示例的功能增强。


/* 
列出指定目录下的内容,当输入的路径不正确时,给出错误提示信息。 
*/  
  
import java.io.*;  
import java.awt.*;  
import java.awt.event.*;  
  
class MyWindowDemo   
{  
    //定义所需组件引用  
    private Frame f;  
    private Button but,bok;  
    private TextField tf;  
    private TextArea ta;  
    private Dialog d;  
    private Label lab;  
  
    //构造函数  
    MyWindowDemo()  
    {  
        init();  
    }  
  
    //窗体基本设置于功能实现  
    public void init()  
    {  
        //组件实例化  
        f=new Frame("我的Window");  
        but=new Button("跳转");  
        tf=new TextField(50);  
        ta=new TextArea(30,60);  
  
        //基本设置  
        f.setBounds(300,150,500,500);  
        f.setLayout(new FlowLayout());  
  
        //添加组件  
        f.add(tf);  
        f.add(but);  
        f.add(ta);  
  
        //窗体事件  
        myEvent();  
  
        //窗体显示  
        f.setVisible(true);  
    }  
  
    //注册事件  
    public void myEvent()  
    {  
        //窗体关闭功能  
        f.addWindowListener(new WindowAdapter()  
        {  
            public void windowClosing(WindowEvent e)  
            {  
                System.exit(0);  
            }  
        });  
  
        //“跳转”按钮事件  
        but.addActionListener(new ActionListener()  
        {  
            public void actionPerformed(ActionEvent e)  
            {  
                showFile();//列出目录内容在文本区中  
            }  
        });  
  
          
  
        //文本框键盘事件  
        tf.addKeyListener(new KeyAdapter()  
        {  
            public void keyPressed(KeyEvent e)  
            {  
                //如果键盘按下Enter键,就将目录内容显示在文本区中  
                if(e.getKeyCode()==KeyEvent.VK_ENTER)  
                    showFile();  
            }  
        });  
    }  
  
    //目录内容显示在文本区中方法  
        private void showFile()  
        {  
            String path=tf.getText();//获取输入的路径  
            File dir=new File(path);//将路径封装成对象  
            //判断输入的路径是否存在,且是否是文件夹  
            if (dir.exists()&&dir.isDirectory())  
            {  
                ta.setText("");//清空文本区中的内容---------  
                  
                String names[]=dir.list();//列出目录下的内容  
                //遍历  
                for (String name : names )  
                {  
                    ta.append(name+"\r\n");//添加进文本区中  
                }  
            }  
            else  
            {  
                //对话框基本设置  
                d=new Dialog(f,"错误提示",true);  
                d.setBounds(400,200,280,150);  
                d.setLayout(new FlowLayout());  
  
                bok=new Button("确定");  
                lab=new Label();  
  
                //添加按钮和文本  
                d.add(bok);  
                d.add(lab);  
  
  
                //对话框关闭事件  
                d.addWindowListener(new WindowAdapter()  
                {  
                    public void windowClosing(WindowEvent e)  
                    {  
                        d.setVisible(false);//退出对话框  
                    }  
                });  
  
                //“确定”按钮事件  
                bok.addActionListener(new ActionListener()  
                {  
                    public void actionPerformed(ActionEvent e)  
                    {  
                        d.setVisible(false);//按确认键,退出对话框  
                    }  
                });  
  
  
                String info="您输入的路径:"+path+"是错误的,请重输!";  
  
                lab.setText(info);//设置标签文本内容  
                d.setVisible(true);//显示对话框  
            }  
        }  
  
    public static void main(String[] args)   
    {  
        //运行窗体  
        new MyWindowDemo();  
    }  
}  


二、菜单:Menu


        1)Menu:菜单,继承MenuItem;有右三角的图标存在,可添加Menu和MenuItem
        2)MenuBar:菜单栏,可添加菜单和菜单条目。一般先创建菜单栏,再创建菜单。
        3)MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项。
        4)菜单的事件处理和组件一样,可以对类型为MenuItem和Menu的对象这个事件源添加活动监听ActionListener,并进行相关的事件处


理。
        5)通过setMenuBar()方法,将菜单添加到Frame中。
示例: 
[java] view plaincopy
import java.awt.*;  
import java.awt.event.*;  
  
class MyMenuDemo   
{  
    //定义组件引用  
    private Frame f;  
    private MenuBar mb;  
    private Menu m,subMenu;  
    private MenuItem closeItem,subItem;  
    //构造函数  
    MyMenuDemo()  
    {  
        init();  
    }  
//窗体设置与功能实现   
    public void init()  
    {  
        //窗体设置  
f = new Frame("my window");  
        f.setBounds(300,100,500,600);  
        f.setLayout(new FlowLayout());  
      
        mb = new MenuBar();//创建菜单条  
        m = new Menu("文件");//创建菜单  
        subMenu = new Menu("子菜单");//菜单下面的子菜单  
  
        subItem = new MenuItem("子条目");//子菜单包含的菜单条目  
        closeItem = new MenuItem("退出");//菜单包含的条目  
          
//菜单添加菜单组件  
        subMenu.add(subItem);  
        m.add(subMenu);  
        m.add(closeItem);  
        mb.add(m);  
        //窗体添加菜单组件  
        f.setMenuBar(mb);  
        //窗体上事件  
        myEvent();  
        //窗体显示  
        f.setVisible(true);  
    }  
    private void myEvent()  
    {  
        //关闭菜单具备关闭事件  
        closeItem.addActionListener(new ActionListener()  
        {  
            public void actionPerformed(ActionEvent e)  
            {  
                System.exit(0);  
            }  
        });  
        //窗体关闭功能  
        f.addWindowListener(new WindowAdapter()  
        {  
            public void windowClosing(WindowEvent e)  
            {  
                System.exit(0);   
            }  
        });  
    }  
      
    public static void main(String[] args)   
    {  
        new MyMenuDemo();  
    }  
}  
 
三、jar包双击执行
        既然是图形化界面,就需要通过图形化界面的形式运行程序,而不是是用Dos命令行执行,那么如何通过双击程序就执行程序呢?这就


需要将程序的class文件打包。
步骤如下:
        1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;
        2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件
        3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: 


mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。
        4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令
        5、此时双击即可执行。
说明:
        1)在固定格式中:
                a、如果无空格:在编译的时候,就会报IO异常,提示无效的头字段,即invalidheader field。这说明1.txt在被IO流读取。
                b、如果无回车:在列表清单.MF中不会加入相应的加载主类的信息,也就是说配置清单的属性主类名称不会加载进清单中,


也就不会执行。
        2)jar文件必须在系统中注册,才能运行。注册方法如下:
        A.对于XP系统:
               a.打开任意对话框,在菜单栏点击工具按钮,选择文件夹选项
               b.选择新建--->扩展名,将扩展名设置为jar,确定
               c.选择高级,可更改图标,然后点击新建,命名为open,
               d.在用于可执行应用程序中,点浏览,将jdk下的bin的整个文件路径添加进来,并在路径后添加-jar即可。
        B.对于win7系统:
               a.改变打开方式:右击.jar文件,点击打开方式,选择默认程序为jdk下bin中的javaw.exe应用程序。
               b.修改关联程序的注册表:打开注册表(win+r),找到注册表路径\HKEY_CLASSES_ROOT\Aplications\javaw.exe\shell


\open\command下的字符串值,右击点修改,在原路径的中添加-jar,如:"C:\ProgramFiles\Java\jre6\bin\javaw.exe" -jar "%1",注意-


jar两边要有空格,保存。
              c.双击即可执行jar程序,如果仍不能执行,则需下载最新版的jdk。
示例:
[java] view plaincopy
/* 
练习:利用Menu组件完成一个简单的记事本程序。 
需求:具有文件菜单,文件中有打开,保存和退出功能。将写好的程序变为双击可执行的程序。 
*/  
  
package mymenu;  
import java.awt.*;  
import java.awt.event.*;  
import java.io.*;  
  
class MyMenuText  
{  
    //定义组件引用  
    private Frame f;  
    private TextArea ta;  
    private MenuBar mb;  
    private Menu fileMe;  
    private MenuItem openMi,saveMi,otherSaveMi,closeMi;  
  
    private FileDialog openDia,saveDia;  
  
    private File file;  
  
    //构造函数  
    MyMenuText()  
    {  
        init();  
    }  
  
    //功能实现  
    private void init()  
    {  
        //组件实例化  
        f=new Frame("MyText");  
        ta=new TextArea();  
          
        mb=new MenuBar();  
        fileMe=new Menu("文件");  
        openMi=new MenuItem("打开");  
        saveMi=new MenuItem("保存");  
        otherSaveMi=new MenuItem("另存为");  
        closeMi=new MenuItem("退出");  
  
        openDia=new FileDialog(f,"选择打开的文件",FileDialog.LOAD);  
        saveDia=new FileDialog(f,"保存到哪里",FileDialog.SAVE);  
  
        //基本设置  
        f.setBounds(300,150,600,500);  
  
        //添加组件  
        f.add(ta);  
        f.setMenuBar(mb);  
  
        mb.add(fileMe);  
        fileMe.add(openMi);  
        fileMe.add(saveMi);  
        fileMe.add(otherSaveMi);  
        fileMe.add(closeMi);  
  
        //窗体中事件  
        myEvent();  
  
        //窗体显示  
        f.setVisible(true);  
    }  
  
    private void myEvent()  
    {  
        //窗体关闭功能  
        f.addWindowListener(new WindowAdapter()  
        {  
            public void windowClosing(WindowEvent e)  
            {  
                System.exit(0);  
            }  
        });  
  
        //打开事件  
        openMi.addActionListener(new ActionListener()  
        {  
            public void actionPerformed(ActionEvent e)  
            {  
                //显示文件对话窗口  
                openDia.setVisible(true);//------------------  
                String dir=openDia.getDirectory();//获取目录  
                String fileName=openDia.getFile();//获取文件名  
                  
                if(dir==null||fileName==null)//对打开了文件对话框,但未做出操作的处理  
                    return;  
          
                file=new File(dir,fileName);//文件对象  
                try  
                {  
                    ta.setText("");//每打开一个文件时,将文本区的内容清空  
                    //带缓冲技术的读取流  
                    BufferedReader br=new BufferedReader(new FileReader(file));  
                    String line=null;//读一行  
                    while ((line=br.readLine())!=null)  
                    {  
                        //添加到文本区域  
                        ta.append(line+"\r\n");  
                    }  
                    br.close();//关流  
                }  
                catch (IOException ie)  
                {  
                    throw new RuntimeException("文件打开失败");  
                }  
            }  
        });  
  
        //保存事件  
        saveMi.addActionListener(new ActionListener()  
        {  
            public void actionPerformed(ActionEvent e)  
            {  
                //如果是第一次保存,则显示文件对话框  
                if(file==null)//-------------  
                {  
                    //显示文件对话框  
                    saveDia.setVisible(true);//----------------------  
                    String dir=saveDia.getDirectory();  
                    String filename=saveDia.getFile();  
                      
                    if(dir==null||filename==null)//--------------------  
                        return;  
  
                    file=new File(dir,filename);  
                      
                }  
                save();//保存文件方法  
            }  
        });  
          
        //另存为事件  
        otherSaveMi.addActionListener(new ActionListener()  
        {  
            public void actionPerformed(ActionEvent e)  
            {  
                //不管是不是第一次保存,都显示文件对话框  
                saveDia.setVisible(true);//----------------------  
                String dir=saveDia.getDirectory();  
                String filename=saveDia.getFile();  
  
                if(dir==null||filename==null)//--------------------  
                    return;  
  
                file=new File(dir,filename);  
  
                save();//保存文件方法  
                //保存时,默认文件对话框位置在打开文件的位置  
                openDia.setFile(file.getName());  
            }  
        });  
  
        //退出事件  
        closeMi.addActionListener(new ActionListener()  
        {  
            public void actionPerformed(ActionEvent e)  
            {  
                System.exit(0);  
            }  
        });  
    }  
      
    //保存文件  
    private void save()  
    {             
        try  
        {  
            //带缓冲区的写入流  
            BufferedWriter bw=new BufferedWriter(new FileWriter(file));  
            //获取文本区域中的内容  
            String text=ta.getText();  
            bw.write(text);//写入文件中  
            bw.close();//关流  
  
        }  
        catch (IOException ie)  
        {  
            throw new RuntimeException("文件保存失败");  
        }  
    }  
  
    public static void main(String[] args)   
    {  
        //程序运行  
        new MyMenuText();  
    }  
}  




Java Swing 第二版:深入学习Java GUI编程 Java Swing库是一个用于开发Java应用程序GUI的工具包,它提供了一整套丰富的组件来构建复杂的用户界面。Swing基于AWT(Abstract Window Toolkit),并且几乎完全用Java编写,因此提供了平台无关性。Swing组件广泛应用于桌面应用程序,提供了易于使用、功能强大的组件,如按钮、文本框、列表、树和表格等。在某些情况下,Swing提供的事件类型可能不能满足特定的需求。在这种情况下,我们可以自定义事件和监听器。自定义事件通常继承自。 阅读详情

相关推荐

[A-21]ARMv8/v9-SMMU系统架构和功能概述

本文简述了SMMU的系统架构和核心功能

基层架构师的分享 1723

图形化界面知识点

一、创建图形化界面 1.awt,需要调用本地系统方法实现功能。Swing,建立的一套图形化界面系统,其中提供了更多的组间,完全java实现。所以使用一般是两者合起来使用。 class AwtDemo{ public static void main(String[]

奔跑的小车车博客专栏 890

Mem0 vs LangMem vs Letta:三大AI记忆框架实战对比(附代码示例)

本文深入对比了Mem0、LangMem和Letta三大AI记忆框架的核心特性与适用场景。Mem0提供开箱即用的记忆管理服务,适合快速集成;LangMem深度融入LangGraph生态,适合复杂工作流;Letta则采用虚拟内存系统,旨在突破上下文窗口限制。文章通过实战代码示例,为开发者选择适合其业务需求的AI记忆解决方案提供了清晰指南。

g9h0i1的博客 679

Java——GUI

目录 AWT内容 Frame框架 创建窗口Frame 框架属性设置 ​ 封装框架 Panel面板 创建Panel Panel基础属性设置 将Panel放入(添加至)Frame中 监听事件,监听窗口关闭事件 System.exit(0)适配器模式:Adapter 布局管理器 按钮 Button 流式布局 东西南北中Border(边框、边界) 表格布局Grid 事件监听 添加监听器 两个按钮实现一个监听事件 输入框事件监听 创建文本框 获取文本框输入消...

weixin_62838185的博客 1561

BetaFlight开源飞控源码分析

BetaFlight是穿越机领域比较成熟的开源飞控,本篇文章主要分析一下源代码以及如何使用这个开源代码

weixin_43811044的博客 1万+

maxwell与steady state thermal 通过workbench耦合仿真

文章目录maxwellsteady state thermal maxwell 1加入maxwell并打开 2导入模型 3选择求解器类型:涡流求解器eddy current 4修改模型名字不能带_等特殊符号 5为模型赋材料 6设立3D边界,各边电流进出方向为0其余方向300 7设置激励条件,可设置电流大小,相位,方向 8设置集肤深度,选取中间铜导体的体然后设置,如何设置看帮助文档 9求解设置 迭代步数 收敛精度 交流电频率 10验证条件满足计算 11求解 发现无法求解,删除ai

roymustang的博客 9199

GUI图形界面编程总结之Frame,Panel

GUI:Graphical User Interface,即图形用户界面,用于计算机与用户交互的一种方式 AWT:Abstract Window Toolkit,抽象窗口开发包。重量级组件。在Windows系统与Linux系统都可运行,但由于是调用操作系统实现的组件,在两个平台运行后并不是完全相同,可移植性一般。 位于java.awt包中。 Swing:在AWT基础上发展而来,轻量级组件,不...

weixin_30597269的博客 195

雷电模拟器+Python 3.11:手把手教你用Frida-dexdump给安卓APK脱壳(附GDA查壳)

本文详细介绍了如何使用雷电模拟器和Python 3.11配合Frida-dexdump工具进行安卓APK脱壳的全流程。从环境配置、工具安装到脱壳操作和问题排查,提供了包含30+关键截图的保姆级教程,适合零基础用户快速上手。重点讲解了Frida工具链的使用技巧和GDA查壳方法,帮助读者掌握移动应用安全分析的基础技能。

weixin_42568801的博客 326

Java eclipse 写 Hellow World 和类继承与方法实练(二)

序言 Java eclipse 写 Hellow World 和类继承与方法实练(一)完成了最基本的Java/Eclipse操练,但是,新年之际,无论如何也要在《Java eclipse 写 Hellow World 和类继承与方法实练(一)》的基础上做出个界面来,用JAVA JDK自带的AWT个窗口。于是,将《Java eclipse 写 Hellow World 和类继承与方法实练(一)》做一些修改如下: 修改1 修改module-info.java, 加入一行 requires java.des

weixin_45707491的博客 275

OFDM基本原理

OFDM基础介绍,包括OFDM的核心思想,数学推导了OFDM信号的调制解调过程。

伊丽莎白的学习之路 8904

BPC坏点矫正

whatis the Bad Pixel? 坏点为死点,也就是基本不随照度变化呈现光电线性转换的关系。表现为暗态常亮,亮态常暗。 坏点分类:静态坏点:亮坏点,暗坏点。 动态坏点:在一定像素范围内,该点表现正常,而超过这一范围,该点表现的比周围像素要亮。与sensor ...

camerall 1万+

GUI编程

GUI 编程 1、简介 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 2、AWT 2.1、AWT介绍 2.2、组件和容器 1、Frame package com.Yoona.lesson01; import java.awt.*; public class TestFrame { public static void main(String[] args) { //Frame Frame frame = new Frame(

GitHub:https://github.com/myp020301 270

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java学习笔记——GUI编程

学习Gui的核心技术Swing和 AWT,包括窗口组件、容器、弹窗、标签、按钮等基础知识,方便以后写出自己心中想要的一些小工具。

haryjiang42的博客 1007

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java GUI编程学习

Java Gui 编程学习

weixin_42591499的博客 2243

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java awt编程_Java学习之AWT GUI编程

Java学习之AWT GUI编程0x00 前言既然前面提到了要重写冰蝎和一些反序列化工具,当然就不能随便说说而已。在编写这些工具还是要使用图形化工具来的方便一些,所以提前把GUI的框架给学习一遍。其实重写webshell工具这个也就是实现部分,现在就差个gui框架。这里其实是已经完善了单向加密和双向加密的功能,并且服务端aes动态密钥加密也写好了,且可以定义128和256位aes的加密。0x01 ...

weixin_28903111的博客 314

Java学习之GUI编程

文章目录1. 简介1.1 怎么学(通用)1.2 组件1.3 简介1.3.1 GUI不流行的原因1.3.2 为什么要学习GUI?2. AWT2.1 Awt介绍2.1.1 类2.1.2 元素2.2 容器和组件2.2.1 Frame类(窗口)2.4.2 面板Panel类3. Swing4.5.6.7. 1. 简介 1.1 怎么学(通用) 这是什么? 它怎么玩? 平时如何运用? 1.2 组件 窗口 弹窗 面板 文本框 按钮 图片 监听事件 鼠标事件 键盘事件 外挂:(JVM,跨平台) 破解文件(class -

的博客 664

Java学习记录 Day19(NIO流、GUI编程)

Day 19 2019年5月25日。 这是我来到西部开源的第十九天。 这一天,我学到了以下的知识。 NIO流 NIO流,是面向缓冲区的,基于通道的IO操作,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多 以下,用一个文件复制类copyFile来说明NIO流。copyFile执行三个基本的操作:创建一个Buffe...

赈川 386

JAVA GUI编程学习笔记目录

2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之GUI编程窗体事件 6.JAVA之GUI编程Action事件 7.JAVA之GUI编程鼠标事件 8.JAVA之GUI编程键盘码查询器 9.JAVA之GUI编程列出指定目录内容 10...

weixin_33924312的博客 934

Java之GUI编程学习笔记一 —— GUI概述

GUI编程学习笔记一 —— GUI概述 什么是GUI编程 就是Java图形化界面 但是不流行了,原因 1、界面不美观 2、需要jre环境 为什么要学习 1、MVC的基础,可以了解MVC架构,了解监听器 2、可以方便自己写一些小工具 3、工作的时候也可能需要维护到Swing界面,虽然概率极小(很老的公司了) GUI组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠...

影龙武的博客qq_43594119 537

Java学习--GUI编程

那么为什么我们还要学习GUI编程呢?

m0_52585291的博客 207

java qt gui_工控编程,Qt 学习之路

原标题:工控编程,Qt 学习之路Qt 是一个著名的 C++ 库——或许并不能说这只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI。使用 Qt,在一定程序上你获得的是一个“一站式”的服务:不再需要研究 STL,不再需要 C++ 的string,因为Qt有它自己的 QString 等等。或许这样说很偏激,但 Qt 确实是一个“伟大的 C++ 库”。我们所使用的 Qt,确切地说也就是它的 ...

weixin_32100383的博客 405

基于《狂神说java》GUI编程--学习笔记

本笔记参考于学友:小尹^_^ ;本笔记仅做学习与复习使用,不存在刻意抄袭。给各位学友强烈推荐《遇见狂神说》他的整套Java学习路线使我获益匪浅!!!点击跳转至遇见狂神说哔哩哔哩首页如果你也是狂神的小迷弟,可以加我好友一起探讨学习。...

wudidahuanggua的博客 559

Java学习-GUI编程-让小蛇动起来

Java学习-GUI编程-让小蛇动起来

weixin_45876155的博客 283

Java_GUI编程基础学习

Java GUI基础学习

Akatsuki333的博客 907
上一篇: java 学习银行调度学习笔记
下一篇: Android之监测手机网络状态的广播
rongbinjava
博客等级 码龄11年 15粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值