Java基础—GUI

  一、GUI——图形化界面,人与计算机交流的桥梁。java.awt:重量级控件,需要调用本地系统方法实现。javax.swing:轻量级控件,完全由java实现,增强可移植性。
  二、布局管理器:容器中组件的排放方式。

  1. 流式布局(FlowLayout):从左到右布局;
  2. 边界式布局(BorderLayout):上北下南左西右东,不指定方位,填充整个区域,是默认的布局方式。
  3. 网格式布局(GridLayout):比如计算器式布局;
  4. 网格包式布局(GridBagLayout):组件占多个格子;
  5. 卡片式布局(CardLayout):比如属性布局。
    注:当一个窗体涉及多个布局方式时,需先将窗体用面板(Panel)划分,再添加组件。
      三、GUI的制作步骤:

        1、创建Frame窗体;
       &emso;2、对Frame窗体做基本设置,比如:大小、位置、布局等;
        3、创建组件;
        4、用Frame的add功能将组件添加到Frame窗体中;
        5、添加监听器;
        6、让窗体显示,f.setVisiable(true);
      四、事件监听机制:先确定事件源,确定事件,确定添加哪种监听器,做出何种处理。
        1、WindowListener:窗体事件监听器,比如关闭窗体;
        2、ActionListener:活动监听器,活动事件;
        3、MouseListener:鼠标监听器,点击(双击)、滑过、移出、按下时、释放时;
        4、KeyListener:键盘监听器:键入、按下时、释放时。
      五、练习
    1、读取目录

/*
 读取目录:
 步骤:
      1、先做出图形界面;
      2、再添加监听器;
      3、容错处理;
      4、添加键盘回车事件。

其他说明:1、ta.setText():添加新内容时,之前的内容会被覆盖;
             ta.append():将内容追加到后面
          2、TextField:创建时可以指定列数;
          3、TextArea:创建时,参数列表:行数、列数;
          4、Dialog:参数列表:所属窗体,对话框名称,状态模式;

注:监听器一个一个添加,添加一个测试一个,全部添加再测试问题不好找。
    我添加的顺序:窗体关闭监听器、添加按钮监听器、对话框监听器、文本框监听器。
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class GuiTest
{
    //基本的Frame窗体,及组件
    private Frame f;
    private TextField tf;
    private Button b;
    private TextArea ta;
    //弹出对话框及里面的组件
    private Dialog d;
    private Button okB;
    private Label l;
    GuiTest()
    {
        init();
    }
    public void init()
    {
        //创建Frame窗体
        try
        {
            f = new Frame("my frame");
            //对Frame窗体进行基本的设置
            f.setBounds(300,200,600,500);
            f.setLayout(new FlowLayout());

            tf = new TextField(54);
            b = new Button("转到");
            ta = new TextArea(26,60);

            //将组件添加到Frame窗体中
            f.add(tf);
            f.add(b);
            f.add(ta);

            //给窗体绑定事件
            myEvent();

            //显示窗体
            f.setVisible(true);
        }

        catch (Exception e)
        {
            throw new RuntimeException("窗体建立失败");
        }
    }
    //事件函数
    public void myEvent()
    {
        //添加窗体关闭事件
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });

        //添加按钮事件
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                buttonEvent();
            }
        });
        //添加文本框事件
        tf.addKeyListener(new KeyAdapter()
        {
            public void keyPressed(KeyEvent e)
            {
                if(e.getKeyCode() == KeyEvent.VK_ENTER)
                {
                    buttonEvent();
                }
            }
        });
    }
    //按钮、回车键触发的事件相同,所以提取出来
    public void buttonEvent()
    {
        //获取文本框内容,并将封装成File对象
        String dirPath = tf.getText();
        File dir = new File(dirPath);
        //如果是目录,则将目录下的文件名写在文本区域
        if(dir.exists() && dir.isDirectory())
        {
            ta.setText("");
            String[] names = dir.list();
            for(String name : names)
            {
                ta.append(name+"\r\n");
            }
        }
        //如果不是目录,弹出对话框
        else
        {
            try
            {
                //建立对话框及组件
                d = new Dialog(f,"提示",true);
                okB = new Button("确定");
                l = new Label();

                //对对话框做基本设置
                d.setBounds(500,300,200,100);
                d.setLayout(new FlowLayout());

                //想对话框中添加组件
                d.add(l);
                d.add(okB);

                //想标签里添加文字
                l.setText("目录不存在,请重新输入!");

                //给对话框添加关闭对话框事件
                d.addWindowListener(new WindowAdapter()
                {
                    public void windowClosing(WindowEvent e)
                    {
                        d.setVisible(false);
                    }
                });
                //给确定按钮对象添加关闭对话框的事件
                okB.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        d.setVisible(false);
                    }
                });

                d.setVisible(true);
            }
            catch (Exception ie)
            {
                throw new RuntimeException("对话框添加失败!");
            }
        }
    }
    public static void main(String[] args) 
    {
        new GuiTest();
    }
}

2、简单的文本编辑器

/*
文本编辑器:

步骤:1、做好界面;
      2、添加监听器;
      3、容错处理;

其他说明:文本打开对话框和文本保存对话框都是用FileDialog创建的,文本打开对话框用:FileDialog.LOAD模式;
          而文本保存对话框用:FileDialog.SAVE模式。弹出文本保存对话框之前,需要判断文本是否已经存在,
          若存在不弹文本保存对话框,直接保存,若不存在,则弹文本保存对话框。
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyMenu
{
    //创立窗体及组件
    private Frame f;
    private TextArea ta;
    //菜单栏及菜单
    private MenuBar bar;
    private Menu filem;
    private MenuItem openm;
    private MenuItem savem;
    private MenuItem exitm;
    //打开文本、保存文本框
    private FileDialog openfd,savefd;

    //用于将文件的目录封装成File对象
    private File dir;

    MyMenu()
    {
        init();
    }
    public void init()
    {
            //创建窗体,并对其做基本设置
            f = new Frame("我的文本编辑器");
            f.setBounds(300,200,600,500);

            //创建窗体组件
            ta = new TextArea();
            bar = new MenuBar();

            //添加窗体组件
            f.setMenuBar(bar);
            f.add(ta);

            //创建菜单
            filem = new Menu("文件");
            openm = new MenuItem("打开");
            savem = new MenuItem("保存");
            exitm = new MenuItem("退出");

            //将菜单添加到菜单栏
            bar.add(filem);
            filem.add(openm);
            filem.add(savem);
            filem.add(exitm);

            //创建保存、打开文本框
            openfd = new FileDialog(f,"打开",FileDialog.LOAD);
            savefd = new FileDialog(f,"保存",FileDialog.SAVE);

            //绑定窗体事件
            myEvent();

            //显示窗体
            f.setVisible(true);

    }
    public void myEvent()
    {
        //添加关闭窗体事件
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        //添加退出事件
        exitm.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                System.exit(0);
            }
        });
        //添加打开事件
        openm.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                //点击“打开”,弹出打开文本对话框
                openfd.setVisible(true);
                //获取文本存储路径及名字
                String path = openfd.getDirectory();
                String name = openfd.getFile();
                //System.out.println(name+path);
                //容错处理
                if(path == null || name == null)
                    return;
                //打开新的文本之前,先清空文本区域
                ta.setText("");
                //将文本存放路径封装成File对象
                dir = new File(path,name);

                try
                {
                    //建立读取流,并与指定文本相关联
                    BufferedReader bufr = new BufferedReader(new FileReader(dir));
                    String line = null;
                    //从硬盘读取文本并书写到文本区域
                    while((line = bufr.readLine()) != null)
                    {
                        ta.append(line+"\r\n");
                    }
                    //关闭读取流
                    bufr.close();
                }
                catch (IOException ie)
                {
                    throw new RuntimeException("读取文件失败!");
                }

            }
        });
        //添加保存事件
        savem.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                //打开文本保存对话框之前,先判断该文本是否存在,
                if(dir == null)
                {
                    //若不存在弹出文本保存对话框
                    savefd.setVisible(true);
                    //获取文本保存路径及名字
                    String path = savefd.getDirectory();
                    String name = savefd.getFile();
                    //容错处理
                    if(path == null || name == null)
                        return;

                    //将路径及文本名称封装成File对象
                    dir = new File(path,name);
                    try
                    {
                        //建立写流,将文本区域的文本写到指定硬盘里
                        BufferedWriter bufw = new BufferedWriter(new FileWriter(dir));
                        String text = ta.getText();
                        //System.out.println(text);
                        bufw.write(text);
                        //关闭写流
                        bufw.close();
                    }
                    catch (IOException ie)
                    {
                        throw new RuntimeException("文件保存失败");
                    }

                }
                //如果文本存在,不弹文本保存对话框
                else
                {
                    try
                    {
                        //建立写流,将文本区域的内容,写到硬盘中
                        BufferedWriter bufw = new BufferedWriter(new FileWriter(dir));
                        String text = ta.getText();
                        bufw.write(text);
                        bufw.close();
                    }
                    catch(IOException ie)
                    {}
                }
            }
        });
    }
    public static void main(String[] args) 
    {
        new MyMenu();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值