package Lesson_17_18; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; /************************************************************** * 2013.3.12 * 2013.3.14 * Swing基本组件(上) * @author Gavin **************************************************************/ /*********************************课堂内容********************************* * 1、GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好 * 2、在Java的早期版本中,GUI组件由名为AWT(Abstract Window Toolkit,抽象窗口工具包) * 的标准库来提供除了GUI组件外,AWT还包括其它功能来支持图像绘画、处理剪切/复制类型 * 的数据传送,以及其它相关操作 * 3、AWT组件最大的缺陷是它依赖于操作系统,也就是说,AWT程序运行在不同的操作上会有不同的 * 外观和行为,这一点对于Java的平台无关性来讲,是无法容忍的。 * 4、Swing组件是在AWT组件基础上发展而来的轻量级组件,与AWT相比不但改进了用户界面, * 而且所需的系统资源更少,Swing是纯Java组件,使得应用程序在不同的平台上运行时具 * 有相同外观和相同的行为 * 5、javax.swing包中常用的容器组件:容器组件是指可以容纳其它组件的组件 * (1)JFrame 组件用于在Swing程序中创建窗体 * --->JFrame() 创建新窗体,该窗体初始为不可见 * --->JFrame(String title)创建新窗体,使用参数title指定标题,该窗体初始为不可见 * --->void setTitle(String title)设置窗体的标题,标题内容由参数title指定 * --->void setSize(int width, int height)设置窗体的大小,参数width指定宽度, * 参数height指定高度,单位是像素 * --->void setResizable(boolean resizable)设置窗体能否调整大小,由参数resizable决定 * --->void setVisible(boolean b) 设置窗体是否为可见,由参数b决定,true为可见,false为不可见 * --->Container getContentPane()获得当前窗体的内容面板 * --->void setDefaultCloseOperation(int operation)设置窗体在关闭时默认执行的操作 * --->void dispose()释放当前窗体及其所有子组件所占用的资源,即卸载窗体 * --->void repaint()重新绘制当前窗体 * --->对于类似于窗体这样的容器组件,我们一般自定义一个类,继承于JFrame类,然后将窗体中 * 的子组件作为类中成员进行声明,以方便操作 * --->事实上,一个完整的窗体是由外部框架和内容面板两部分组成的 * 外部框架是指由标题栏和四边所组成空心边框,它主要用来控制窗体的大小和外观 * 我们实际操作的是内容面板,如设置窗体的背景色,设置窗体的布局,往窗体中添加其它组件等等 * 使用getContentPane方法获得当前窗体的内容面板,该方法的返回值是Container(容器)类对象 * Container类在java.awt包中 * (2)java.awt.Container类,Container类通常用于操作JFrame的内容面板,其常用的方法有 * ---> void setBackground(Color bg)设置容器的背景色,由参数bg指定颜色 * --->void setLayout(LayoutManager mgr)设置容器的布局,参数是布局管理器 * --->Component add(Component comp)往容器中添加一个组件 * --->Component add(Component comp, int index)将指定组件添加到容器中的指定位置上 * --->void remove(Component comp)从容器中移除指定的组件 * --->void removeAll()从容器中移除所有组件 * --->void repaint()重新绘制当前容器 * (3)javax.swing.JDialog,JDialog用于在程序中创建对话框组件 * ---->它与JFrame的区别在于,JFrame可以在程序中不依赖于其它窗体 * 单独存在,而JDialog则必须依赖于其它窗口,一般做辅助窗口呈现 * ---->但更重要的是,JDialog支持模式显示 * 所谓模式显示,是指窗口以不丢失焦点的独占方式显示 * * --->JDialog()创建一个没有标题并且没有指定所有者的无模式对话框 * --->JDialog(Frame owner)创建一个没有标题但将指定的owner作为其所有者的无模式对话框 * --->JDialog(Frame owner, boolean modal)创建一个没有标题但有指定所有者的对话框, * 根据参数modal来决定它是否模式显示 * --->JDialog(Frame owner, String title)创建一个具有指定标题和指定所有者的无模式对话框 * --->JDialog(Frame owner, String title, boolean modal)创建一个有指定标题和指定所有者 * 的对话框,参数modal决定它是否模式显示 * --->JDialog(Dialog owner, boolean modal)创建一个没有标题但有指定所有者的对话框, * 根据参数modal来决定它是否模式显示 * --->void setTitle(String title)设置对话框的标题,标题内容由参数title指定 * --->void setSize(int width, int height)设置对话框的大小 * --->void setResizable(boolean resizable)设置对话框能否调整大小,由参数resizable决定 * --->void setVisible(boolean b)设置对话框是否为可见,由参数b决定,true为可见,false为不可见 * --->Container getContentPane()获得当前对话框的内容面板 * --->void dispose()释放当前对话框及其所有子组件所占用的资源,即卸载对话框 * ()未完待续... * * 6、Color类用于创建颜色对象,其构造方法共有7种重载方式,常用的是: * --->Color(int r, int b, int g)使用指定的红、蓝、绿的色值创建sRGB颜色对象, * 这些值都在0~255的范围之内 * --->Color类中还提供一系列静态的颜色常量 * 7、javax.swing.JButton * --->JButton()创建一个空按钮 * --->JButton(String text)创建一个带文本的按钮 * --->JButton(Icon icon)创建一个带图标的按钮 * --->JButton(String text, Icon icon)创建一个带文本和图标的按钮 * * --->void setText(String text)设置按钮上的文本 * --->String getText()获得按钮上的文本 * --->void setBackground(Color bg)设置按钮的背景色 * --->Color getBackground()获得按钮的背景色 * --->void setEnabled(boolean b)设置启用(或禁用)按钮,由参数b决定 * --->void setVisible(boolean b)设置按钮是否为可见,由参数b决定 * --->void setToolTipText(String text)设置按钮的悬停提示信息 * --->void setMnemonic(int mnemonic)设置按钮的快捷键 * 8、布局管理器 * --->流式布局(FlowLayout) * --->边界布局(BorderLayout) * --->网格布局(GridLayout) * -->一般使用空布局来解决复杂的界面 * ******************************************************************************/ public class Day3_12 { public static void main(String[] args) { // //窗口程序 // JFrame f=new JFrame();//创建了一个 窗体对象 默认不可见 // f.setSize(400,300); // f.setTitle("QQ");//设置窗体的标题 为 "QQ" // f.setResizable(false);//禁止改变窗体大小 // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//JFrame.Exit_ON_CLOSE=3 常量字段 // f.setLocationRelativeTo(null);//设置居中显示 // f.repaint();//重新绘制窗体 // f.setVisible(true);//设置可见,让窗体显示出来,一般都放在最后 MyFrame f2=new MyFrame(); Container c=f2.getContentPane();//获得当前窗体的容器面板 c.setBackground(Color.yellow);//设置背景色为黄色 //也可以自己构造一个颜色,比如产生一个随机颜色--->RGB Random r=new Random(); c.setBackground(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256))); //Jbutton:按钮 // JButton btnOK=new JButton("确定"); // f2.add(btnOK); // JFrame frame=new JFrame("我的窗口");//创建了一个窗体对象 名字叫frame,使用“我的窗口”作为标题,默认不可见 // JButton btnOk=new JButton("确定"); // frame.setLayout(new FlowLayout()); // frame.setSize(500,300);//设置大小 // frame.add(btnOk); // frame.getContentPane().setBackground(Color.BLUE); // frame.setBackground(Color.orange);//窗口是由很多层组成的,背景色在最后,故看不到 // frame.setVisible(true); } }
package Lesson_17_18; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Font; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.Border; public class MyFrame extends JFrame{//一般会自己定义一个类,继承于JFrame,来操作里面的内容,方便 JLabel lal=new JLabel("用户登录"); JButton btnOK1=new JButton("确定1"); JButton btnOK2=new JButton("确定2"); JButton btnOK3=new JButton("确定3"); JButton btnOK4=new JButton("确定4"); JButton btnOK5=new JButton("确定5"); public MyFrame(){ this.setTitle("我的自定义窗口"); this.setSize(400,300); this.setResizable(false);//禁止改变窗体大小 lal.setForeground(Color.yellow); lal.setFont(new Font("黑体",Font.BOLD ,24)); //往窗体上添加按钮 //容器会有布局管理器来负责管理里面的组件是如何放置的。 //每个容器都有默认的布局管理器,如:窗体的JFrame的默认管理为:边框布局(将窗口划分为上下左右中五个区域) //所以,在窗体中添加组件时要指定放的位置 this.setLayout(new FlowLayout(FlowLayout.LEFT));//设置为流式布局 //这时就不用说明按钮的方向了 因为它是按从左到右的顺序摆放的,如果溢出,会自动换到下一行,重新开始 this.add(lal); this.add(btnOK1,BorderLayout.NORTH);//放在上面 this.add(btnOK2,BorderLayout.SOUTH);//放在下面 // this.add(btnOK3,BorderLayout.EAST);//放在右边 // this.add(btnOK4,BorderLayout.WEST);//放在左边 // this.add(btnOK5);//默认放在中间 //BorderLayout就是布局管理器 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//JFrame.Exit_ON_CLOSE=3 常量字段 this.setLocationRelativeTo(null);//设置居中显示 this.setVisible(true);//设置可见,让窗体显示出来,一般都放在最后 }//这样的话,只要是利用自定义类创建的窗体,都会是这样的设置 }
package Lesson_17_18; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPasswordField; import javax.swing.JTextField; public class NullLayout extends JFrame { JButton btnOK=null; JTextField text=null; //文本框 JPasswordField password=null;//密码框 public NullLayout() { super("空布局的使用"); this.setIconImage(new ImageIcon("Ico.jpg").getImage()); this.setSize(400,300); this.setLayout(null);//空布局:意味着必须指定加入的组件的位置和大小 init(); this.setDefaultCloseOperation(3); this.setLocationRelativeTo(null); this.setVisible(true); } public void init(){ btnOK=new JButton("确定(O)"); // btnOK.setIcon(new ImageIcon("Ico.jpg"));//给按钮设置图标 btnOK.setMnemonic('O');//设置热键 btnOK.setBounds(100,100,80,30);//设置按钮位置和大小 this.add(btnOK);//添加按钮到窗体 text=new JTextField();//文本框 text.setBounds(100,10,200,35); this.add(text); } public static void main(String[] args) { new NullLayout(); } }