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(); } }

浙公网安备 33010602011771号