2022年雪蒂斯冰淇淋防骗子,雪蒂斯打击骗子的恶意诋毁之图形界面编程技术手册 .pdf
广州腾科网络技术有限公司Java教学部朱德宝图形界面编程技术手册编写: Kende_zhu 1. GUI 的历史图形用户界面( Graphical User Interface,简称 GUI,又称图形用户接口)即人机交互图形化用户界面设计。2. 何为 GUI 我们可以借助画画来理解GUI 编程(1) GUI 编程: Applet、AWT、Swing Applet:是一种 Java程序,它一般运行在支持Java的 Web浏览器内。运行applet所需的大多数图形支持能力都内置于浏览器中。(现在已有被 flash 等取代的趋势,很少使用了。 )AWT:抽象窗口工具包(Abstract Window Toolkit , AWT) ,其作用是给用户提供基本的界面构件,这一类实现的是application 的应用程序,由于缺陷很多,有被使用 Swing 类取代的趋势。Swing: 是一个用于开发Java应用程序用户界面的 开发工具包 。使用 Swing类的编程,这是目今倾向使用的application 编成的方法。是对继承AWT 类编程的一个改进。优势:1、丰富的组件类型;2、丰富的组件特性;3、好的组件 API 模型支持: Swing 遵循 MVC 模式;4、可扩展和灵活性;5、标准的 GUI 库。(2) Swing 基本容器: JFrame 首先画画前需要有个画框或者画板, GUI 中需要你先创建一个最基本的界面容器: JFrame (3) 基本组件好了,有了画板,就可以开始画画了,在哪画?当然是在画板中。所以在GUI 中,你可以在容器中,通过添加组件的方式,开始绘制界面。我们来了解两个最基本的组件:a) 标签组件b) 按钮组件(4) 布局管理器GUI 中通过布局管理器,来帮助实现图形界面的布局a) FlowLayout 布局管理器b) BorderLayout 布局管理器c) GridLayout 布局管理器d) CardLayout 布局管理器e) 绝对定位(5) 事件处理机制名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝第一节基本容器 JFrame 1、第一个 JFrame 窗体程序publicclass JFrameDemo publicstaticvoid main(String args) JFrame jf = new JFrame( 这是我的第一个swing窗体 ); Dimension d = new Dimension(300, 200); jf.setSize(d); Point p = new Point(500, 400); jf.setLocation(p); jf.setVisible( true); 第二节标签组件 JLabel 1、定义标签对象publicclass JLabelDemo publicstaticvoid main(String args) JFrame jf = new JFrame( 这是我的第一个swing窗体 ); JLabel lab = new JLabel(KENDE , JLabel.CENTER); /实例化标签对象jf.add(lab);/将Label组件添加到 JFrame 面板中Dimension d = new Dimension(300, 200); jf.setSize(d); Point p = new Point(500, 400); jf.setLocation(p); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝jf.setVisible(true); 2、定义标签字体标签可以设置字体,包括什么字体,字体的颜色,大小,是否斜体等publicclass JLabelDemo2 publicstaticvoid main(String args) JFrame jf = new JFrame( 这是我的第一个swing窗体 ); JLabel lab = new JLabel(KENDE , JLabel.CENTER); /实例化标签对象Font font = new Font(Dialog, Font.ITALIC + Font.BOLD, 30); lab.setFont(font); jf.add(lab);/将组件添加到面板中Dimension d = new Dimension(300, 200); jf.setSize(d); Point p = new Point(500, 400); jf.setLocation(p); jf.setVisible(true); 3、得到本机中所有的字体publicclass GetAllFonts publicstaticvoid main(String args) GraphicsEnvironment g = GraphicsEnvironment . getLocalGraphicsEnvironment(); String fonts = g.getAvailableFontFamilyNames(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝for (String name: fonts) System.out .println(name); 4、在 Label 中设置显示的图片publicclass JLabelDemo3 publicstaticvoid main(String args) JFrame jf = new JFrame( 这是我的第一个swing窗体 ); Icon icon = new ImageIcon(野生动物王国.jpg); JLabel lab = new JLabel(KENDE , icon, JLabel.CENTER); / 实例化标签对象Font font = new Font(Serif, Font.ITALIC + Font.BOLD, 30); lab.setFont(font); jf.add(lab);/ 将组件添加到面板中Dimension d = new Dimension(300, 200); jf.setSize(d); Point p = new Point(500, 400); jf.setLocation(p); jf.setVisible(true); 第三节按钮组件 JButton 1、在 JFrame 中增加按钮名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝publicclass JButtonDemo01 publicstaticvoid main(String args) JFrame frame = new JFrame(Welcome to Kendes home! ); JButton bt = new JButton( 按钮 ); frame.add(bt); frame.setSize(300,200); frame.setLocation(400, 300); frame.setVisible(true); 2、往 JButton 中添加图片publicclass JButtonDemo02 publicstaticvoid main(String args) JFrame frame = new JFrame(Welcome to Kendes home! ); String picPath = E:picBackGrouda.jpg; Icon icon = new ImageIcon(picPath); JButton bt = new JButton(icon); frame.add(bt); frame.setSize(800,500); frame.setLocation(400, 300); frame.setVisible(true); 第四节布局管理器1、FlowLayout 布局管理器FlowLayout 属于流式布局管理器,使用此种布局方式,所有的组件会像流水一样依次排列。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝publicclass FlowLayoutDemo01 publicstaticvoid main(String args) JFrame frame = new JFrame(Welcome to kendes home); frame.setLayout( new FlowLayout(FlowLayout.CENTER, 20 , 20 ); JButton button = null; for( int i = 0; i 9; i +) button = new JButton( 按钮 - + i); frame.add(button); frame.setSize(800,500); frame.setLocation(400, 300); frame.setVisible(true); 效果图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝2、BorderLayout 布局管理器BorderLayout 将一个窗体的版面划成东,西,南,北,中五个区域,可以直接将需要的组件放到五个区域即可publicclass BorderLayoutDemo01 publicstaticvoid main(String args) JFrame frame = new JFrame(Welcome to kendes home); frame.setLayout( new BorderLayout(20, 20); frame.add(new JButton( 东 ), BorderLayout.EAST); frame.add(new JButton( 西 ), BorderLayout.WEST ); frame.add(new JButton( 南 ), BorderLayout.SOUTH); frame.add(new JButton( 北 ), BorderLayout.NORTH ); frame.add(new JButton( 中 ), BorderLayout.CENTER); frame.setSize(500,300); frame.setLocation(400, 300); frame.setVisible(true); 3、GridLayout 布局管理器GridLayout 布局管理器是以表格的形式进行管理的,在使用此布局管理器的时候必须设置显示的行数和列数。publicclass GridLayoutDemo01 publicstaticvoid main(String args) JFrame frame = new JFrame(Welcome to kendes home); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝frame.setLayout(new GridLayout(3, 5, 3, 3); JButton button = null; for( int i = 0; i 13; i +) button = new JButton( 按钮 - + i); frame.add(button); frame.setSize(500,300); frame.setLocation(400, 300); frame.setVisible(true); 效果图:4、CardLayout 布局管理器CardLayout 就是将一组组件彼此重叠的进行布局,就像一张张卡片一样,这样每次只会展现一个界面publicclass CardLayoutDemo01 publicstaticvoid main(String args) JFrame frame = new JFrame(Welcome to kendes home); CardLayout card = new CardLayout(); frame.setLayout(card); Container con = frame.getContentPane(); con.add ( new JLabel( 标签 -A , JLabel.CENTER), first); con.add(new JLabel( 标签 -B , JLabel.CENTER), second); con.add(new JLabel( 标签 -C , JLabel.CENTER), third); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝con.add(new JLabel( 标签 -D , JLabel.CENTER), fourth); con.add(new JLabel( 标签 -E , JLabel.CENTER), fifth); frame.pack(); frame.setVisible(true); card.show(con, third); for ( int i = 0; i 窗口被选中 ) ; public void windowClosed (WindowEvent e) System.out.println(windowClosed - 窗口被关闭 ) ; public void windowClosing (WindowEvent e) System.out.println(windowClosing - 窗口关闭 ) ; System.exit(1) ; public void windowDeactivated (WindowEvent e) System.out.println(windowDeactivated - 取消窗口选中 ) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝public void windowDeiconified (WindowEvent e) System.out.println(windowDeiconified - 窗口从最小化恢复) ; public void windowIconified (WindowEvent e) System.out.println(windowIconified - 窗口最小化 ) ; public void windowOpened (WindowEvent e) System.out.println(windowOpened - 窗口被打开 ) ; ; public class MyEventWindowEventJFrame01 public static void main(String args) JFrame frame = new JFrame(Welcome To kendes home) ; frame.addWindowListener(new MyWindowEventHandle() ; / 加入事件frame.setSize(300,150) ; frame.setBackground(Color.WHITE) ; frame.setLocation(300,200) ; frame.setVisible(true) ; 注意:发现以上程序虽然实现了窗口关闭,但是没有必要实现那么多的方法,可以如何做呢,其实在事件中提供了很多的适配器class MyWindowEventHandle2 extends WindowAdapter public void windowClosing(WindowEvent e) System.out.println(windowClosing - 窗口关闭 ) ; System.exit(1) ; ; public class MyEventWindowEventJFrame02 public static void main(String args) JFrame frame = new JFrame(Welcome To kende s home) ; frame.addWindowListener(new MyWindowEventHandle2() ; / 加入事件frame.setSize(300,150) ; frame.setBackground(Color.WHITE) ; frame.setLocation(300,200) ; frame.setVisible(true) ; 现在只要求一个关闭,资源太浪费了,可以使用匿名内部类的做法减少代码量名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝public class MyEventWindowEventJFrame03 public static void main(String args) JFrame frame = new JFrame(Welcome To kende s home) ; frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.out.println(windowClosing - 窗口关闭 ) ; System.exit(1) ; ) ; / 加入事件frame.setSize(300,150) ; frame.setBackground(Color.WHITE) ; frame.setLocation(300,200) ; frame.setVisible(true) ; 2、按钮事件如果要使得按钮有效,那么只需要使用ActionListener 接口class ActionHandle private JFrame frame = new JFrame(Welcome To kendes home) ; private JButton but = new JButton( 显示 ); private JLabel lab = new JLabel() ; private JTextField text = new JTextField(10) ; private JPanel pan = new JPanel() ; public ActionHandle() Font fnt = new Font(Serief,Font.ITALIC + Font.BOLD,28) ; lab.setFont(fnt) ; / 设置标签的显示文字lab.setText(等待用户输入信息!) ; but.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) / if(e.getSource() instanceof JButton) / 判断是否是按钮if(e.getSource()=but) lab.setText(text.getText() ; ) ; frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(1) ; ) ; / 加入事件frame.setLayout(new GridLayout(2,1) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝pan.setLayout(new GridLayout(1,2) ; pan.add(text); pan.add(but) ; frame.add(pan) ; frame.add(lab) ; frame.pack() ; frame.setBackground(Color.WHITE) ; frame.setLocation(300,200) ; frame.setVisible(true) ; ; public class MyActionEventDemo01 public static void main(String args) new ActionHandle() ; 完成一个简单的用户登录,用户名是kende,密码是 123 class LoginCheck private String name ; private String password ; public LoginCheck(String name,String password) this.name = name ; this.password = password ; public boolean validate() if(kende.equals(name)&123.equals(password) return true ; else return false ; ; class ActionHandle2 private JFrame frame = new JFrame(Welcome To kendes home) ; private JButton submit = new JButton( 登陆 ); private JButton reset = new JButton( 重置 ); private JLabel nameLab = new JLabel( 用户名: ) ; private JLabel passLab = new JLabel( 密码: ) ; private JLabel infoLab = new JLabel( 用户登陆系统) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝private JTextField nameText = new JTextField(10) ; private JPasswordField passText = new JPasswordField() ; private JPanel pan = new JPanel() ; public ActionHandle2() Font fnt = new Font(Serief,Font.ITALIC + Font.BOLD,12) ; infoLab.setFont(fnt) ; / 设置标签的显示文字submit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if(e.getSource()=submit) String tname = nameText.getText() ; String tpass = new String(passText.getPassword() ; LoginCheck log = new LoginCheck(tname,tpass) ; if(log.validate() infoLab.setText( 登陆成功,欢迎光临!) ; else infoLab.setText( 登陆失败,错误的用户名或密码!) ; ) ; reset.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if(e.getSource()=reset) nameText.setText() ; passText.setText() ; infoLab.setText( 用户登陆系统 ) ; ) ; frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(1) ; ) ; / 加入事件frame.setLayout(null) ; nameLab.setBounds(5,5,60,20) ; passLab.setBounds(5,30,60,20) ; infoLab.setBounds(5,65,220,30) ; nameText.setBounds(65,5,100,20) ; passText.setBounds(65,30,100,20) ; submit.setBounds(165,5,60,20) ; reset.setBounds(165,30,60,20) ; frame.add(nameLab) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝frame.add(passLab) ; frame.add(infoLab) ; frame.add(nameText) ; frame.add(passText) ; frame.add(submit) ; frame.add(reset) ; frame.setSize(280,130) ; frame.setBackground(Color.WHITE) ; frame.setLocation(300,200) ; frame.setVisible(true) ; ; public class MyActionEventDemo03 public static void main(String args) new ActionHandle2() ; 3、键盘事件class MyKeyHandle extends JFrame implements KeyListener private JTextArea text = new JTextArea() ; public MyKeyHandle() super.setTitle(Welcome To kendes home) ; JScrollPane scr = new JScrollPane(text) ; scr.setBounds(5,5,300,200) ; super.add(scr) ; text.addKeyListener(this) ; super.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(1) ; ) ; / 加入事件super.setSize(310,210) ; super.setVisible(true) ; public void keyPressed(KeyEvent e) text.append(键盘“ + KeyEvent.getKeyText(e.getKeyCode()+ ”键按下 n) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝public void keyReleased(KeyEvent e) text.append(键盘“ + KeyEvent.getKeyText(e.getKeyCode()+ ”键松开 n) ; public void keyTyped(KeyEvent e) text.append(输入的内容是: + e.getKeyChar() + n) ; ; public class MyKeyEventDemo01 public static void main(String args) new MyKeyHandle() ; 以上的键盘事件中,类必须要实现接口中的所有方法,太麻烦,那么在swing 中也提供了键盘处理的 Adapter 类,直接使用此类即可。class MyKeyHandle2 extends JFrame private JTextArea text = new JTextArea() ; public MyKeyHandle2() super.setTitle(Welcome To kendes home) ; JScrollPane scr = new JScrollPane(text) ; scr.setBounds(5,5,300,200) ; super.add(scr) ; text.addKeyListener(new KeyAdapter() public void keyTyped(KeyEvent e) text.append(输入的内容是: + e.getKeyChar() + n) ; ) ; super.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(1) ; ) ; / 加入事件super.setSize(310,210) ; super.setVisible(true) ; ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝public class MyKeyEventDemo02 public static void main(String args) new MyKeyHandle2() ; 4、鼠标事件class MyMouseHandle extends JFrame implements MouseListener private JTextArea text = new JTextArea() ; public MyMouseHandle() super.setTitle(Welcome To kendes home) ; JScrollPane scr = new JScrollPane(text) ; scr.setBounds(5,5,300,200) ; super.add(scr) ; text.addMouseListener(this) ; super.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(1) ; ) ; / 加入事件super.setSize(310,210) ; super.setVisible(true) ; public void mouseClicked(MouseEvent e) int c = e.getButton() ; String mouseInfo = null ; if(c=MouseEvent.BUTTON1) mouseInfo = 左键 ; if(c=MouseEvent.BUTTON3) mouseInfo = 右键 ; if(c=MouseEvent.BUTTON2) mouseInfo = 滚轴 ; text.append(鼠标单击: + mouseInfo + n) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 24 页 - - - - - - - - - 广州腾科网络技术有限公司Java教学部朱德宝 public void mouseEntered(MouseEvent e) text.append(鼠标进入组件。n) ; public void mouseExited(MouseEvent e) text.append(鼠标离开组件。n) ; public void mousePressed(MouseEvent e) text.append(鼠标按下。 n) ; public void mouseReleased(MouseEvent e) text.append(鼠标松开。 n) ; ; public class MyMouseEventDemo01 public static void main(String args) new MyMouseHandle() ; 鼠标中也提供了Adapter 类,可以减少代码class MyMouseHandle2 extends JFrame private JTextArea text = new JTextArea() ; public MyMouseHandle2() super.setTitle(Welcome To kendes home) ; JScrollPane scr = new JScrollPane(text) ; scr.