java-GUI

container容器

创建窗口

import java.awt.*;

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的大小
        win1.setSize(400,400);
        //设置窗口的可见
        win1.setVisible(true);
    }
}

创建panel

!!!!!!!注意,所有组件都不能单独存在,都需要依附于窗口

!!!!!!!在windows下面编写gui在vmoptions把默认的编码方式改成gbk

import java.awt.*;

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        //设置panel
        Panel panel=new Panel();
        panel.add(new TextField("测试文本"));  //添加一个测试文本
        panel.add(new Button("按钮"));
        win1.add(panel);
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的大小
        win1.setSize(400,400);
        //设置窗口的可见
        win1.setVisible(true);
    }
}

Scollpane带滚动条的框

import java.awt.*;

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        //设置ScrollPane,滚动条容器
        ScrollPane scrollPane=new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);  //ScrollPane.SCROLLBARS_ALWAYS代表始终拥有滚动条显示
        scrollPane.add(new TextField("测试文本"));  //添加一个测试文本
        scrollPane.add(new Button("按钮"));
        win1.add(scrollPane);
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的大小
        win1.setSize(400,400);
        //设置窗口的可见
        win1.setVisible(true);
        //发现只显示了按钮,文本不见了,根本原因是按钮和文本组件的默认布局管理器不同
    }
}

布局管理器

 

流式布局

import java.awt.*;

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        win1.setLayout(new FlowLayout(FlowLayout.LEFT,20,20)); //流式布局,左对齐,垂直和水平间距都为20px
        for(int i=0;i<50;i++){
            win1.add(new Button("按钮"));  //添加50个按钮
        }
        win1.pack(); //自动将组件大小改成合适的值
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的大小
        win1.setSize(400,450);
        //设置窗口的可见
        win1.setVisible(true);
    }
}

borderlayout

import java.awt.*;

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        win1.setLayout(new BorderLayout(20,20)); //边界布局,左对齐,垂直和水平间距都为20px
        win1.add( new Button("南"),BorderLayout.SOUTH);
        win1.add( new Button("北"),BorderLayout.NORTH);
        win1.add( new Button("东"),BorderLayout.EAST);
        win1.add( new Button("西"),BorderLayout.WEST);
        win1.add( new Button("中"),BorderLayout.CENTER);
        win1.pack(); //自动将组件大小改成合适的值
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的大小
        win1.setSize(400,450);
        //设置窗口的可见
        win1.setVisible(true);
    }
}
import java.awt.*;

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        win1.setLayout(new BorderLayout(20,20)); //边界布局,左对齐,垂直和水平间距都为20px
        win1.add( new Button("南"),BorderLayout.SOUTH);
        win1.add( new Button("北"),BorderLayout.NORTH);
        /*当同时添加两个组件在中间部位的时候,前面的一个将会被后面的哪一个给覆盖掉,此时用panel去装这两个组件就可以同时显示*/
//        win1.add( new Button("中"),BorderLayout.CENTER);
//        win1.add(new TextField("文本"),BorderLayout.CENTER);
        Panel p1=new Panel();
        p1.add(new Button("中"));
        p1.add(new TextField("文本"));
        win1.add(p1,BorderLayout.CENTER);
        win1.pack(); //自动将组件大小改成合适的值
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的大小
        win1.setSize(400,450);
        //设置窗口的可见
        win1.setVisible(true);
    }
}

网格布局gridlayout

import java.awt.*;

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        win1.setLayout(new BorderLayout()); //边界布局
        Panel p1=new Panel();
        p1.add(new TextField("文本",30));   //30表示的是这个文本框横向能容纳下30个字符
        win1.add(p1,BorderLayout.NORTH);  //p1的文本框放在北边
        Panel p2=new Panel();
        p2.setLayout(new GridLayout(3,3,5,5));  //panel2划分为3*3的网格,垂直和水平间距都是5
        for (int i=0;i<9;i++){
            p2.add(new Button(String.valueOf(i)));  //往网格里面的九个位置放按钮
        }
        win1.add(p2,BorderLayout.CENTER);  //把p2放到中间
        win1.pack();   //调整合理组件大小
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的可见
        win1.setVisible(true);
    }
}

 高级网格布局

 

这个不用学,后面用swing里面有更好的

cardlayout卡片布局

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        win1.setLayout(new BorderLayout());   //设置主窗口是边界布局
        /*-----p1卡片布局----*/
        final Panel p1=new Panel();
        final CardLayout cardLayout=new CardLayout();   //设置p1卡片布局
        p1.setLayout(cardLayout);
        String[] cardname= {"第一张","第二张","第三张"};
        for(int i=0;i<cardname.length;i++){
            p1.add(cardname[i],new Button(cardname[i]));   //往布局里面塞卡片
        }
        win1.add(p1,BorderLayout.CENTER);    //把p1设置在中间块
        /*-----p2流式布局----*/
        Panel p2=new Panel();
        Button b1=new Button("上一张");
        Button b2=new Button("下一张");
        Button b3=new Button("第一张");
        Button b4=new Button("第三张");
        p2.add(b1);
        p2.add(b2);
        p2.add(b3);
        p2.add(b4);    //把按钮放到p2   pannel中
        ActionListener listener=new ActionListener(){    //定义按钮的监听器
            @Override
            public void actionPerformed(ActionEvent e) {   //必须重写的方法
                String getaction_one=e.getActionCommand();   //获取监听到触发的按钮的名字,并且把它给getaction_one
                switch (getaction_one){
                    case "上一张":   //判断上一张按下,使得卡片布局变成前一个
                        cardLayout.previous(p1);
                        break;
                    case "下一张":   //判断下一张按下,使得卡片布局变成下一个
                        cardLayout.next(p1);
                        break;
                    case "第一张" :
                        cardLayout.first(p1);
                        break;
                    case "第三张" :
                        cardLayout.show(p1,"第三张");
                        break;
                }
            }
        };   //这个结尾是要加分号的,因为这是一个简易的类
        b1.addActionListener(listener);   //将按钮绑定到监听器
        b2.addActionListener(listener);
        b3.addActionListener(listener);
        b4.addActionListener(listener);
        win1.add(p2,BorderLayout.SOUTH);  //p2放在下面
        win1.pack();   //调整合理组件大小
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的可见
        win1.setVisible(true);
    }
}

 swing-block水平垂直块布局。常用方法

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

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        Box hbox=Box.createHorizontalBox();
        hbox.add(new Button("水平按钮1"));
        hbox.add(new Button("水平按钮2"));
        Box vbox=Box.createVerticalBox();
        vbox.add(new Button("垂直按钮1"));
        vbox.add(new Button("垂直按钮2"));
        win1.add(hbox,BorderLayout.NORTH);
        win1.add(vbox,BorderLayout.CENTER);
        win1.pack();   //调整合理组件大小
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的可见
        win1.setVisible(true);
    }
}

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

public class test {
    public static void main(String[] args) throws Exception {
    //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        Box hbox=Box.createHorizontalBox();
        hbox.add(new Button("水平按钮1"));
        hbox.add(Box.createHorizontalGlue());   //创建水平分割,不设置参数在两个方向上都可以拉伸
        hbox.add(new Button("水平按钮3"));
        hbox.add(Box.createHorizontalStrut(30));   //定死了水平宽度30的间隔,不可拉伸
        hbox.add(new Button("水平按钮2"));
        Box vbox=Box.createVerticalBox();
        vbox.add(new Button("垂直按钮1"));
        vbox.add(Box.createVerticalGlue());
        vbox.add(new Button("垂直按钮2"));
        vbox.add(Box.createVerticalStrut(30));  //限定死高度的间隔
        vbox.add(new Button("垂直按钮3"));
        win1.add(hbox,BorderLayout.NORTH);
        win1.add(vbox,BorderLayout.CENTER);
        win1.pack();   //调整合理组件大小
        //设置窗口的位置,相对于屏幕的左上角
        win1.setLocation(200,200);
        //设置窗口的可见
        win1.setVisible(true);
    }
}

常用组件

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

public class test {
    Frame win1=new Frame("这里是创建的窗口");
    TextArea ta1=new TextArea(5,20);  //该多行文本框里的文本占据5行20列
    Choice colorChooser=new Choice();  //创建选择框
    CheckboxGroup cbg =new CheckboxGroup(); //创建单项选择的组
    Checkbox male=new Checkbox("male",cbg,true);   //创建两个选择框,组都是cbg,男默认是选中的
    Checkbox female=new Checkbox("female",cbg,false);
    Checkbox ismarried=new Checkbox("是否已婚");
    TextField tf1=new TextField(20);  //文本占位20列
    Button ok=new Button("确认");
    List colorlist=new List(6,true);  //选择框展示6行,可以多选
    public void init(){
    //组装底部,用一个单行文本框和一个按钮
        Box bbox= Box.createHorizontalBox();
        bbox.add(tf1);
        bbox.add(ok);
        win1.add(bbox,BorderLayout.SOUTH);
        //组装中间(左边块)的下面部位,下拉框和复选
        colorChooser.add("红色");colorChooser.add("蓝色");
        Box centerbox=Box.createHorizontalBox();
        centerbox.add(colorChooser);
        centerbox.add(male);
        centerbox.add(female);
        centerbox.add(ismarried);
        Box clbox=Box.createVerticalBox();//将上面组装的下拉框和选择框和多行文本框装起来
        clbox.add(ta1);
        clbox.add(centerbox);
        //组装整个中间部位,刚刚组装的左边块加上右边的选择列表
        Box cbox=Box.createHorizontalBox();
        cbox.add(clbox);
        cbox.add(colorlist);
        win1.add(cbox,BorderLayout.CENTER);
        //启动
        win1.pack();
        win1.setVisible(true);
    }
    public static void main(String[] args) throws Exception {
    //设置一个窗口
    test t1=new test();
    t1.init();

    }
}

 模式对话框和非模式对话框

模式对话框运行时与主窗体有关联,打开后主窗体是动不了的,非模式对话框没有关联,打开后主窗体也动的了

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

public class GUI1 {
    public static void main(String[] args) throws Exception {
        //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        final Dialog dialog=new Dialog(win1,"模式对话框",true);
        final Dialog dialog1=new Dialog(win1,"非模式对话框",false);
        dialog.setBounds(200,200,300,200);
        dialog1.setBounds(200,200,300,200);
        Button b1=new Button("打开模式对话框");
        Button b2=new Button("打开非模式对话框");
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dialog.setVisible(true);
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dialog1.setVisible(true);
            }
        });
        win1.add(b1,BorderLayout.NORTH);
        win1.add(b2);
        win1.pack();
        win1.setVisible(true);
    }
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GUI1 {
    public static void main(String[] args) throws Exception {
        //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        final Dialog dialog=new Dialog(win1,"模式对话框",true);
        final Dialog dialog1=new Dialog(win1,"非模式对话框",false);
        dialog.setBounds(200,200,300,200);
        Box vbox=Box.createVerticalBox();
        vbox.add(new TextField(20));
        vbox.add(new Button("confirm"));
        dialog.add(vbox);
        Button b1=new Button("b1");
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dialog.setVisible(true);
            }
        });
        win1.add(b1,BorderLayout.NORTH);
        win1.pack();
        win1.setVisible(true);
    }
}

文件对话框

 

 

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

public class GUI1 {
    public static void main(String[] args) throws Exception {
        //设置一个窗口
        Frame win1=new Frame("这里是创建的窗口");
        final FileDialog f1=new FileDialog(win1,"选择要打开的文件",FileDialog.LOAD);
        final FileDialog f2=new FileDialog(win1,"选择要保存的路径",FileDialog.SAVE);
        Button b1=new Button("打开文件");
        Button b2=new Button("保存文件");
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                f1.setVisible(true);
                String directory= f1.getDirectory();
                String file=f1.getFile();
                System.out.println("打开的文件路径为"+directory);
                System.out.println("打开的文件名称是"+file);
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                f2.setVisible(true);
                String directory= f2.getDirectory();
                String file=f2.getFile();
                System.out.println("保存的文件路径为"+directory);
                System.out.println("保存到的文件名称是"+file);
            }
        });
        win1.add(b1,BorderLayout.NORTH);
        win1.add(b2);
        win1.pack();
        win1.setVisible(true);
    }
}

事件监听

简单的事件监听

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

public class GUI1 {
    //设置一个窗口
    Frame win1=new Frame("这里是创建的窗口");
    TextField tf=new TextField(30);
    Button ok=new Button("comfirm");
    public void init(){
        //注册监听
        Mylisten mylisten=new Mylisten();
        ok.addActionListener(mylisten);   //吧按钮绑上监听
        win1.add(tf,BorderLayout.NORTH);
        win1.add(ok);
        win1.pack();
        win1.setVisible(true);
    }

    private class Mylisten implements ActionListener{  //继承监听器的接口
        @Override
        public void actionPerformed(ActionEvent e) {
            tf.setText("nihao");
        }
    }
    public static void main(String[] args) throws Exception {
        GUI1 gui1=new GUI1();
        gui1.init();
    }
}

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

public class GUI1 {
    //设置一个窗口
    Frame win1=new Frame("这里是创建的窗口");
    TextField tf=new TextField(30);
    Choice name=new Choice();
    public void init(){
        //注册监听
        Mylisten mylisten=new Mylisten();
        tf.addTextListener(mylisten);  //给文本框设置监听
        name.addItemListener(new ItemListener() {     //给下拉选择框设置监听
            @Override
            public void itemStateChanged(ItemEvent e) {
                Object item=e.getItem();    //获取当前选中的条目
                System.out.println("当前选中的条目是"+item);
            }
        });
        name.add("asd");
        name.add("Qewq");
        Box bbox=Box.createHorizontalBox();
        bbox.add(tf);
        bbox.add(name);
        win1.addContainerListener(new ContainerListener() {  //窗口监听组件器
            @Override
            public void componentAdded(ContainerEvent e) {
                Component child=e.getChild();   //win1添加组件的时候会执行这个
                System.out.println("添加了"+child);
            }

            @Override
            public void componentRemoved(ContainerEvent e) {

            }
        });
        win1.add(bbox);
        win1.pack();
        win1.setVisible(true);
    }

    private class Mylisten implements TextListener {  //继承监听器的接口
        @Override
        public void textValueChanged(TextEvent e) {
            String text=tf.getText();
            System.out.println("当前文本框内容为"+text);
        }
    }
    public static void main(String[] args) throws Exception {
        GUI1 gui1=new GUI1();
        gui1.init();
    }
}

退出按钮

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

public class GUI1 {
    //设置一个窗口
    Frame win1=new Frame("这里是创建的窗口");
    TextField tf=new TextField(30);
    Choice name=new Choice();
    public void init(){
        //注册监听
        win1.setBounds(200,200,300,300);
        win1.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {  //设置好退出按钮
                System.exit(0);
            }
        });
//        win1.pack();
        win1.setVisible(true);
    }

    public static void main(String[] args) throws Exception {
        GUI1 gui1=new GUI1();
        gui1.init();
    }
}

 菜单

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

public class GUI1 {
    //设置一个窗口
    Frame win1=new Frame("这里是创建的窗口");
    //创建菜单条
    MenuBar menuBar=new MenuBar();
    //创建菜单组件
    Menu filemu=new Menu("文件");
    Menu editmu=new Menu("编辑");
    Menu formatmu=new Menu("格式");
    //创建菜单项组件
    MenuItem auto=new MenuItem("自动换行");
    MenuItem copy=new MenuItem("复制");
    TextArea ta=new TextArea(6,40);
    MenuItem paste=new MenuItem("粘贴",new MenuShortcut(KeyEvent.VK_Q,true)); //关联快捷键ctrl+shift+q
    public void  init(){
        paste.addActionListener(new ActionListener() {   //设置点击事件
            @Override
            public void actionPerformed(ActionEvent e) {
                ta.append("点击了"+e.getActionCommand());  //点击了粘贴就打印
            }
        });
        formatmu.add(paste);  //格式里面放粘贴和复制
        formatmu.add(copy);
        editmu.add(auto);  //编辑里面加复制
        filemu.add(formatmu);  //文件里面放格式
        menuBar.add(filemu);  //文件和编辑放进菜单条
        menuBar.add(editmu);
        win1.setMenuBar(menuBar);   //装载菜单条
        win1.add(ta);
        win1.pack();
        win1.setVisible(true);
    }

    public static void main(String[] args) throws Exception {
        GUI1 gui1=new GUI1();
        gui1.init();
    }
}

右击菜单

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

public class GUI1 {
    //设置一个窗口
    Frame win1=new Frame("这里是创建的窗口");
    TextArea ta=new TextArea(6,40);
    Panel p1=new Panel();
    //创建菜单项组件
    PopupMenu popupMenu=new PopupMenu();   //定义右击出来的菜单
    MenuItem auto=new MenuItem("自动换行");  //定义菜单组件
    MenuItem copy=new MenuItem("复制");

    public void  init(){
        ActionListener listener=new ActionListener() {  //定义单击监听器
            @Override
            public void actionPerformed(ActionEvent e) {
                String actioncommand= e.getActionCommand();  //获取单击了的条目的名字
                ta.append("点击了"+actioncommand);  //显示在文本框里面
            }
        };
        auto.addActionListener(listener);  //将菜单里面的选项绑定上监听
        copy.addActionListener(listener);   
        popupMenu.add(auto);   //把菜单选项装进菜单
        popupMenu.add(copy);
        p1.add(popupMenu);   //右击菜单装进panel
        //设置panel的大小
        p1.setPreferredSize(new Dimension(400,300));  //设置panel的大小
        p1.addMouseListener(new MouseAdapter() {   //增加按键监听
            @Override
            public void mouseReleased(MouseEvent e) {
                boolean flag=e.isPopupTrigger();  //默认右键出框,如果是右键就返回true
                if (flag==true){popupMenu.show(p1,e.getX(),e.getY());} //如果是右键,显示在panel上,getx是获取点击时x坐标,
            }
        });
        win1.add(ta,BorderLayout.NORTH);
        win1.add(p1);
        win1.pack();
        win1.setVisible(true);
    }

    public static void main(String[] args) throws Exception {
        GUI1 gui1=new GUI1();
        gui1.init();
    }
}

 绘图

 

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

public class GUI1 {
    private final String Draw_rect="rect";  //定义静态变量用于判别点按钮画什么形状
    private final String Draw_oval="oval";
    Button rectb=new Button("矩形");   //定义两个按钮
    Button ovalb=new Button("椭圆");
    private String chooose_shape="";    //定义coose_shape,按按钮会改变它
    //设置一个窗口
    Frame win1=new Frame("这里是创建的窗口");
    private class zqhCanvas extends Canvas{      //建canvas类
        @Override
        public void paint(Graphics g) {
            if (chooose_shape.equals(Draw_rect)){  //如果choose_shape与Draw_rect相同,就执行下面
                g.setColor(Color.BLACK);  //设置画的黑色
                g.drawRect(100,100,50,50); //图形相对于屏幕左上角的位置,宽高
            }
            if (chooose_shape.equals(Draw_oval)){  //如果choose_shape与Draw_oval相同,就执行下面
                g.setColor(Color.red);  //设置画的黑色
                g.drawOval(100,100,50,50); //图形相对于屏幕左上角的位置,宽高
            }
        }
    }
    zqhCanvas c1=new zqhCanvas();
    public void  init(){
        rectb.addActionListener(new ActionListener() {    //点击rectb的时候会使得choose_shape被修改成Draw_rect
            @Override
            public void actionPerformed(ActionEvent e) {
                chooose_shape=Draw_rect;
                c1.repaint();   //刷新屏幕
            }
        });
        ovalb.addActionListener(new ActionListener() {  //点击ovalb的时候会使得choose_shape被修改成Draw_oval
            @Override
            public void actionPerformed(ActionEvent e) {
                chooose_shape=Draw_oval;
                c1.repaint();
            }
        });
        Panel p=new Panel();
        p.add(rectb);   //用panel装两个按键
        p.add(ovalb);
        c1.setPreferredSize(new Dimension(300,300));  //设置画布canvas的宽高
        win1.add(c1);
        win1.add(p,BorderLayout.SOUTH);
        win1.pack();
        win1.setVisible(true);
    }

    public static void main(String[] args) throws Exception {
        GUI1 gui1=new GUI1();
        gui1.init();
    }
}

 

posted @ 2021-03-07 21:11  克莱比-Kirby  阅读(103)  评论(0)    收藏  举报