为组件设置边框

很多情况下,我们常常喜欢给不同的组件设置边框,从而让界面的层次感更明显,swing中提供了Border对象来代表一个边框,下图是Border的继承体系图:

特殊的Border:

  1. TitledBorder:它的作用并不是直接为其他组件添加边框,而是为其他边框设置标题,创建该类的对象时,需要传入一个其他的Border对象;
  2. ComoundBorder:用来组合其他两个边框,创建该类的对象时,需要传入其他两个Border对象,一个作为内边框,一个座位外边框

给组件设置边框步骤:

  1. 使用BorderFactory或者XxxBorder创建Border的实例对象;
  2. 调用Swing组件的setBorder(Border b)方法为组件设置边框;

案例:

​ 请使用Border实现下图效果:

演示代码:

  1. import javax.swing.*;
  2. import javax.swing.border.*;
  3. import java.awt.*;
  4. public class BorderTest {
  5. JFrame jf = new JFrame("测试边框");
  6. public void init(){
  7. //设置Jframe为网格布局
  8. jf.setLayout(new GridLayout(2,4));
  9. //创建凸起的斜边框,分别设置四条边的颜色
  10. Border bb = BorderFactory.createBevelBorder(BevelBorder.RAISED,Color.RED,Color.GREEN,Color.BLUE,Color.GRAY);
  11. jf.add(getPanelWithBorder(bb,"BevelBorder"));
  12. //创建LineBorder
  13. Border lb = BorderFactory.createLineBorder(Color.ORANGE, 10);
  14. jf.add(getPanelWithBorder(lb,"LineBorder"));
  15. //创建EmptyBorder,会在组件的四周留白
  16. Border eb = BorderFactory.createEmptyBorder(20, 5, 10, 30);
  17. jf.add(getPanelWithBorder(eb,"EmptyBorder"));
  18. //创建EtchedBorder,
  19. Border etb = BorderFactory.createEtchedBorder(EtchedBorder.RAISED, Color.RED, Color.GREEN);
  20. jf.add(getPanelWithBorder(etb,"EtchedBorder"));
  21. //创建TitledBorder,为原有的Border添加标题
  22. TitledBorder tb = new TitledBorder(lb,"测试标题",TitledBorder.LEFT,TitledBorder.BOTTOM,new Font("StSong",Font.BOLD,18),Color.BLUE);
  23. jf.add(getPanelWithBorder(tb,"TitledBorder"));
  24. //直接创建MatteBorder,它是EmptyBorder的子类,EmptyBorder是留白,而MatteBorder可以给留空的区域填充颜色
  25. MatteBorder mb = new MatteBorder(20,5,10,30,Color.GREEN);
  26. jf.add(getPanelWithBorder(mb,"MatteBorder"));
  27. //直接创创建CompoundBorder,将两个边框组合成新边框
  28. CompoundBorder cb = new CompoundBorder(new LineBorder(Color.RED,8),tb);
  29. jf.add(getPanelWithBorder(cb,"CompoundBorder"));
  30. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  31. jf.pack();
  32. jf.setVisible(true);
  33. }
  34. public JPanel getPanelWithBorder(Border border,String borderName){
  35. JPanel jPanel = new JPanel();
  36. jPanel.add(new JLabel(borderName));
  37. //为panel设置边框
  38. jPanel.setBorder(border);
  39. return jPanel;
  40. }
  41. public static void main(String[] args) {
  42. new BorderTest().init();
  43. }
  44. }

使用JToolBar创建工具条

Swing 提供了JToolBar类来创建工具条,并且可以往JToolBar中添加多个工具按钮。

JToolBar API:

方法名称 方法功能
JToolBar( String name , int orientation) 创建一个名字为name,方向为orientation的工具条对象,其orientation的是取值可以是SwingConstants.HORIZONTAL或SwingConstants.VERTICAL
JButton add(Action a) 通过Action对象为JToolBar工具条添加对应的工具按钮
addSeparator( Dimension size ) 向工具条中添加指定大小的分隔符
setFloatable( boolean b ) 设定工具条是否可以被拖动
setMargin(Insets m) 设置工具条与工具按钮的边距
setOrientation( int o ) 设置工具条的方向
setRollover(boolean rollover) 设置此工具条的rollover状态

add(Action a)方法:

​ 上述API中add(Action a)这个方法比较难理解,为什么呢,之前说过,Action接口是ActionListener的一个子接口,那么它就代表一个事件监听器,而这里add方法是在给工具条添加一个工具按钮,为什么传递的是一个事件监听器呢?

​ 首先要明确的是不管是菜单条中的菜单项还是工具条中的工具按钮,最终肯定是需要点击来完成一些操作,所以JToolBar以及JMenu都提供了更加便捷的添加子组件的方法add(Action a),在这个方法的内部会做如下几件事:

  1. 创建一个适用于该容器的组件(例如,在工具栏中创建一个工具按钮);
  2. 从 Action 对象中获得对应的属性来设置该组件(例如,通过 name 来设置文本,通过 lcon 来设置图标) ;
  3. 把Action监听器注册到刚才创建的组件上;

案例:

​ 使用JToolBar组件完成下图效果:

演示代码:

  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. public class JToolBarTest {
  5. JFrame jf = new JFrame("测试工具条");
  6. JTextArea jta = new JTextArea(6, 35);
  7. // 创建工具条
  8. JToolBar jtb = new JToolBar();
  9. // 创建"上一曲"Action,该Action用于创建工具按钮
  10. Action pre = new AbstractAction("上一曲", new ImageIcon("D:\\files\\Java-GUI\\src\\layout\\pre.png")) {
  11. @Override
  12. public void actionPerformed(ActionEvent e) {
  13. jta.append("上一曲.\n");
  14. }
  15. };
  16. // 创建"暂停" Action
  17. Action pause = new AbstractAction("暂停", new ImageIcon("D:\\files\\Java-GUI\\src\\layout\\pause.png")) {
  18. @Override
  19. public void actionPerformed(ActionEvent e) {
  20. jta.append("暂停播放.\n");
  21. }
  22. };
  23. // 创建"下一曲" Action
  24. Action next = new AbstractAction("下一曲", new ImageIcon("D:\\files\\Java-GUI\\src\\layout\\next.png")) {
  25. @Override
  26. public void actionPerformed(ActionEvent e) {
  27. jta.append("下一曲.\n");
  28. }
  29. };
  30. public void init() {
  31. // 给JTextArea添加滚动条
  32. jf.add(new JScrollPane(jta));
  33. // 以Action的形式创建按钮,并将按钮添加到Panel中
  34. JButton preBtn = new JButton(pre);
  35. JButton pauseBtn = new JButton(pause);
  36. JButton nextBtn = new JButton(next);
  37. // 往工具条中添加Action对象,该对象会转换成工具按钮
  38. jtb.add(preBtn);
  39. jtb.addSeparator();
  40. jtb.add(pauseBtn);
  41. jtb.addSeparator();
  42. jtb.add(nextBtn);
  43. // 向窗口中添加工具条
  44. jf.add(jtb, BorderLayout.NORTH);
  45. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  46. jf.pack();
  47. jf.setVisible(true);
  48. }
  49. public static void main(String[] args) {
  50. new JToolBarTest().init();
  51. }
  52. }

JColorChooser和JFileChooser

Swing提供了JColorChooser和JFileChooser这两种对话框,可以很方便的完成颜色的选择和本地文件的选择。

JColorChooser

JColorChooser 用于创建颜色选择器对话框 , 该类的用法非常简单,只需要调用它的静态方法就可以快速生成一个颜色选择对话框:

  1. public static Color showDialog(Component component, String title,Color initialColor)
  2. /*
  3. 参数:
  4. componet:指定当前对话框的父组件
  5. title:当前对话框的名称
  6. initialColor:指定默认选中的颜色
  7. 返回值:
  8. 返回用户选中的颜色
  9. */

案例:

​ 使用颜色选择器,完成下图功能:

​ 点击按钮,改变文本域的背景色

演示代码:

  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. public class JColorChooserDemo {
  5. JFrame jFrame = new JFrame("测试颜色选择器");
  6. JTextArea jta = new JTextArea("快关注我",6,30);
  7. JButton button = new JButton(new AbstractAction("改变文本框的本景色"){
  8. @Override
  9. public void actionPerformed(ActionEvent e) {
  10. //弹出颜色选择器
  11. Color result = JColorChooser.showDialog(jFrame, "颜色选择器", Color.WHITE);
  12. jta.setBackground(result);
  13. }
  14. });
  15. public void init(){
  16. jFrame.add(jta);
  17. jFrame.add(button,BorderLayout.SOUTH);
  18. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  19. jFrame.pack();
  20. jFrame.setVisible(true);
  21. }
  22. public static void main(String[] args) {
  23. new JColorChooserDemo().init();
  24. }
  25. }

JFileChooser

​ JFileChooser 的功能与AWT中的 FileDialog 基本相似,也是用于生成"打开文件"、"保存文件 "对话框。与 FileDialog 不同的是 , JFileChooser 无须依赖于本地平台的 GUI , 它由 100%纯 Java 实现 , 在所有平台 上具有完全相同的行为,并可以在所有平台上具有相同的外观风格。

JFileChooser使用步骤:

  1. 创建JFileChooser对象:
  1. JFileChooser chooser = new JFileChooser("D:\\a");//指定默认打开的本地磁盘路径
  1. 调用JFileChooser的一系列可选方法,进行初始化
  1. setSelectedFile(File file)/setSelectedFiles(File[] selectedFiles):设定默认选中的文件
  2. setMultiSelectionEnabled(boolean b):设置是否允许多选,默认是单选
  3. setFileSelectionMode(int mode):设置可以选择内容,例如文件、文件夹等,默认只能选择文件
  1. 打开文件对话框
  1. showOpenDialog(Component parent):打开文件加载对话框,并指定父组件
  2. showSaveDialog(Component parent):打开文件保存对话框,并指定父组件
  1. 获取用户选择的结果
  1. File getSelectedFile():获取用户选择的一个文件
  2. File[] getSelectedFiles():获取用户选择的多个文件

案例:

​ 使用JFileChooser完成下图效果:

演示代码:

  1. import javax.imageio.ImageIO;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.image.BufferedImage;
  6. import java.io.File;
  7. import java.io.IOException;
  8. public class JFileChooserDemo {
  9. //创建窗口对象
  10. JFrame jf = new JFrame("测试JFileChooser");
  11. //创建打开文件对话框
  12. JFileChooser chooser = new JFileChooser(".");
  13. //创建菜单条
  14. JMenuBar jmb = new JMenuBar();
  15. //创建菜单
  16. JMenu jMenu = new JMenu("文件");
  17. //创建菜单项
  18. JMenuItem open = new JMenuItem(new AbstractAction("打开"){
  19. @Override
  20. public void actionPerformed(ActionEvent e) {
  21. chooser.showOpenDialog(jf);
  22. File imageFile = chooser.getSelectedFile();
  23. try {
  24. image = ImageIO.read(imageFile);
  25. drawArea.repaint();
  26. } catch (IOException e1) {
  27. e1.printStackTrace();
  28. }
  29. }
  30. });
  31. JMenuItem save = new JMenuItem(new AbstractAction("另存为"){
  32. @Override
  33. public void actionPerformed(ActionEvent e) {
  34. chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  35. chooser.showSaveDialog(jf);
  36. File dir = chooser.getSelectedFile();
  37. try {
  38. ImageIO.write(image,"jpeg",new File(dir,"a.jpg"));
  39. } catch (Exception e1) {
  40. e1.printStackTrace();
  41. }
  42. }
  43. });
  44. //用来记录用户选择的图片
  45. BufferedImage image;
  46. //显示图片
  47. class MyCanvas extends JPanel{
  48. @Override
  49. public void paint(Graphics g) {
  50. if (image!=null){
  51. g.drawImage(image,0,0,null);
  52. }
  53. }
  54. }
  55. JPanel drawArea = new MyCanvas();
  56. public void init(){
  57. //设置图片显示区域大小
  58. drawArea.setPreferredSize(new Dimension(500,300));
  59. jf.add(drawArea);
  60. //组装并设置菜单条
  61. jMenu.add(open);
  62. jMenu.add(save);
  63. jmb.add(jMenu);
  64. jf.setJMenuBar(jmb);
  65. //显示jf
  66. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  67. jf.pack();
  68. jf.setVisible(true);
  69. }
  70. public static void main(String[] args) {
  71. new JFileChooserDemo().init();
  72. }
  73. }

JOptionPane

基本概述

通过 JOptionPane 可以非常方便地创建一些简单的对话框, Swing 已经为这些对话框添加了相应的组件,无须程序员手动添加组件 。 JOptionPane 提供了如下 4 个方法来创建对话框 。

方法名称 方法功能
showMessageDialog/showInternalMessageDialog 消息对话框 ,告知用户某事己发生 , 用户只能单击"确定"按钮 , 类似于 JavaScript 的 alert 函数 。
showConfirmDialog/showInternalConfirmDialog 确认对话框,向用户确认某个问题,用户可以选择 yes 、 no ~ cancel 等选项 。 类似于 JavaScript 的 comfirm 函数 。该方法返回用户单击了 哪个按钮
showInputDialog/showInternalInputDialog 输入对话框,提示要求输入某些信息,类似于 JavaScript的 prompt 函数。该方法返回用户输入的字符串 。
showOptionDialog/showInternalOptionDialog 自定义选项对话框 ,允许使用自 定义选项 ,可以取代showConfirmDialog 所产生的对话框,只是用起来更复杂 。

上述方法都有都有很多重载形式,选择其中一种最全的形式,参数解释如下:

  1. showXxxDialog(Component parentComponent,
  2. Object message,
  3. String title,
  4. int optionType,
  5. int messageType,
  6. Icon icon,
  7. Object[] options,
  8. Object initialValue)
  9. --参数解释:
  10. parentComponent:当前对话框的父组件
  11. message:对话框上显示的信息,信息可以是字符串、组件、图片等
  12. title:当前对话框的标题
  13. optionType:当前对话框上显示的按钮类型:DEFAULT_OPTIONYES_NO_OPTIONYES_NO_CANCEL_OPTIONOK_CANCEL_OPTION
  14. messageType:当前对话框的类型:ERROR_MESSAGEINFORMATION_MESSAGEWARNING_MESSAGEQUESTION_MESSAGEPLAIN_MESSAGE
  15. icon:当前对话框左上角的图标
  16. options:自定义下拉列表的选项
  17. initialValue:自定义选项中的默认选中项

当用户与对话框交互结束后,不同类型对话框的返回值如下:

  • showMessageDialog: 无返回值 。
  • showlnputDialog: 返回用户输入或选择的字符串 。
  • showConfirmDialog: 返回 一个整数代表用户选择的选项 。
  • showOptionDialog : 返回 一个整数代表用户选择的选项,如果用户选择第一项,则返回 0; 如果选择第二项,则返回1……依此类推 。

对 showConfirmDialog 所产生的对话框,有如下几个返回值:

  • YES OPTION: 用户 单击了 "是"按钮后返回 。
  • NO OPTION: 用 户单击了"否"按钮后返回 。
  • CANCEL OPTION: 用户单击了"取消"按钮后返回 。
  • OK OPTION : 用户单击了"确定"按钮后返回 。
  • CLOSED OPTION: 用户 单击了对话框右上角的 " x" 按钮后返回。

四种对话框演示

消息对话框:

  1. import cn.itcast.swing.util.ImagePathUtil;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. public class MessageDialogTest {
  6. JFrame jf = new JFrame("测试消息对话框");
  7. JTextArea jta = new JTextArea(6, 30);
  8. JButton btn = new JButton(new AbstractAction("弹出消息对话框") {
  9. @Override
  10. public void actionPerformed(ActionEvent e) {
  11. //JOptionPane.showMessageDialog(jf, jta.getText(), "消息对话框", JOptionPane.ERROR_MESSAGE);
  12. //JOptionPane.showMessageDialog(jf, jta.getText(), "消息对话框", JOptionPane.INFORMATION_MESSAGE);
  13. //JOptionPane.showMessageDialog(jf, jta.getText(), "消息对话框", JOptionPane.WARNING_MESSAGE);
  14. //JOptionPane.showMessageDialog(jf, jta.getText(), "消息对话框", JOptionPane.QUESTION_MESSAGE);
  15. //JOptionPane.showMessageDialog(jf, jta.getText(), "消息对话框", JOptionPane.PLAIN_MESSAGE);
  16. JOptionPane.showMessageDialog(jf, jta.getText(), "消息对话框", JOptionPane.WARNING_MESSAGE, new ImageIcon(ImagePathUtil.getRealPath("2\\female.png")));
  17. }
  18. });
  19. public void init(){
  20. jf.add(jta);
  21. jf.add(btn, BorderLayout.SOUTH);
  22. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  23. jf.pack();
  24. jf.setVisible(true);
  25. }
  26. public static void main(String[] args) {
  27. new MessageDialogTest().init();
  28. }
  29. }

确认对话框:

  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. public class ConfirmDialogTest {
  5. JFrame jf = new JFrame("测试确认对话框");
  6. JTextArea jta = new JTextArea(6, 30);
  7. JButton btn = new JButton(new AbstractAction("弹出确认对话框") {
  8. @Override
  9. public void actionPerformed(ActionEvent e) {
  10. int result = JOptionPane.showConfirmDialog(jf, jta.getText(), "确认对话框",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
  11. if (result == JOptionPane.YES_OPTION){
  12. jta.append("\n用户点击了确定按钮");
  13. }
  14. if (result==JOptionPane.NO_OPTION){
  15. jta.append("\n用户点击了取消按钮");
  16. }
  17. }
  18. });
  19. public void init(){
  20. jf.add(jta);
  21. jf.add(btn, BorderLayout.SOUTH);
  22. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  23. jf.pack();
  24. jf.setVisible(true);
  25. }
  26. public static void main(String[] args) {
  27. new ConfirmDialogTest().init();
  28. }
  29. }

输入对话框:


  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. public class InputDialogTest {
  5. JFrame jf = new JFrame("测试输入对话框");
  6. JTextArea jta = new JTextArea(6, 30);
  7. JButton btn = new JButton(new AbstractAction("弹出输入对话框") {
  8. @Override
  9. public void actionPerformed(ActionEvent e) {
  10. /* String result = JOptionPane.showInputDialog(jf, "请填写您的银行账号:", "输入对话框", JOptionPane.INFORMATION_MESSAGE);
  11. if(result!=null){
  12. jta.append(result.toString());
  13. }
  14. */
  15. Object result = JOptionPane.showInputDialog(jf, "", "输入对话框", JOptionPane.DEFAULT_OPTION, null, new String[]{"柳岩", "舒淇", "龚玥菲"}, "舒淇");
  16. if (result!=null){
  17. jta.append(result.toString());
  18. }
  19. }
  20. });
  21. public void init(){
  22. jf.add(jta);
  23. jf.add(btn, BorderLayout.SOUTH);
  24. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  25. jf.pack();
  26. jf.setVisible(true);
  27. }
  28. public static void main(String[] args) {
  29. new InputDialogTest().init();
  30. }
  31. }

选项对话框:

  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. public class OptionDialogTest {
  5. JFrame jf = new JFrame("测试选项对话框");
  6. JTextArea jta = new JTextArea(6, 30);
  7. JButton btn = new JButton(new AbstractAction("弹出选项对话框") {
  8. @Override
  9. public void actionPerformed(ActionEvent e) {
  10. int result = JOptionPane.showOptionDialog(jf, "请选择尿不湿号码", "选项对话框",JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE,
  11. null,new String[]{"大号","中号","小号"},"中号");
  12. switch (result){
  13. case 0:
  14. jta.setText("用户选择了大号");
  15. break;
  16. case 1:
  17. jta.setText("用户选择了中号");
  18. break;
  19. case 2:
  20. jta.setText("用户选择了小号");
  21. break;
  22. }
  23. }
  24. });
  25. public void init(){
  26. jf.add(jta);
  27. jf.add(btn, BorderLayout.SOUTH);
  28. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  29. jf.pack();
  30. jf.setVisible(true);
  31. }
  32. public static void main(String[] args) {
  33. new OptionDialogTest().init();
  34. }
  35. }

如图片失效等影响浏览文章可参阅公众号文章:

Java-GUI编程之Swing组件的更多相关文章

  1. Java GUI编程4---标签组件JLabel

    Java GUI编程4---标签组件JLabel 2018年06月11日 22:06:58 蓝蓝223 阅读数 12103更多 个人分类: Java书籍摘抄 所属专栏: Java Swing图形界面 ...

  2. Java并发编程之CAS

    CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术.简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替 ...

  3. Java网络编程之TCP、UDP

    Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载.   ...

  4. Java网络编程之UDP

    Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...

  5. Java网络编程之URLConnection

    Java网络编程之URLConnecton 一.URLConnection简介 URLConnection是一个抽象类,表示指向URL指定资源的活动连接.URLConnection有两个不同但相关的用 ...

  6. Java网络编程之URL和URI

    Java网络编程之URL与URI 一.URL与URI简介 URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Lo ...

  7. Java网络编程之InetAddress浅析

    Java网络编程之InetAddress浅析 一.InetAddress综述 IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础.InetA ...

  8. Java高性能编程之CAS与ABA及解决方法

    Java高性能编程之CAS与ABA及解决方法 前言 如果喜欢暗色调的界面或者想换换界面,可以看看我在个人博客发布的 Java高性能编程之CAS与ABA及解决方法. CAS概念 CAS,全称Compar ...

  9. Java并发编程之CAS第一篇-什么是CAS

    Java并发编程之CAS第一篇-什么是CAS 通过前面几篇的学习,我们对并发编程两个高频知识点了解了其中的一个—volatitl.从这一篇文章开始,我们将要学习另一个知识点—CAS.本篇是<凯哥 ...

随机推荐

  1. springcloud断路器作用?

    当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应 当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应)断路器有完全打开状态:一段时间内 达到一定的 ...

  2. 为什么要用 Dubbo?

    随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越 复杂,诞生了面向服务的架构体系(SOA), 也因此衍生出了一系列相应的技术,如对服务提供.服务调用.连接处理.通信 协议.序列化 ...

  3. Dubbo 必须依赖的包有哪些?

    Dubbo 必须依赖 JDK,其他为可选.

  4. Springmvc入门基础(四) ---参数绑定

    1.默认支持的参数类型 处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值. 除了ModelAndView以外,还可以使用Model来向页面传递数据, Model是一个接口,在参数里直接声明 ...

  5. 什么是 DAO 模式?

    DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了 抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访 问操作.在实际的开发中,应该将所有对 ...

  6. ACM中的位运算技巧

    听说位运算挺好玩的,那这节总结一下ACM中可能用到的位运算技巧. XOR运算极为重要!!(过[LC136](只出现一次的数字 - 力扣(LeetCode)):数组中每个数字都出现两次,只有一个出现一次 ...

  7. 运筹学之"概率"和"累计概率"和"谁随机数"

    概率 = 2/50 = 0.2 累计概率 = 上个概率加本次概率 案例1 概率=销量天数 / 天数 = 2 /100 = 0.02 累计概率 = 上个概率加本次概率 = 0.02 +0.03 = 0. ...

  8. Chrome 53 Beta一些有意思的改动

    原文链接: http://blog.chromium.org/2016...译者:Icarus邮箱:xdlrt0111@163.com 如果没有特殊说明的话,以下都是应用在Android,Chrome ...

  9. 小程序开发之一(使用fly进行http封装)

    原文地址:http://callmesoul.cn 下载fly js文件 fly小程序文档 /api/config.js 配置,主要配置全局的host url和request拦截和request拦截 ...

  10. 微信小程序安全浅析

    引言 近期微信小程序重磅发布,在互联网界掀起不小的波澜,已有许多公司发布了自己的小程序,涉及不同的行业领域.大家在体验小程序用完即走便利的同时,是否对小程序的安全性还存有疑虑.白泽日前对微信小程序进行 ...