由JList类代表的Swing列表显示一个可选取对象列表,它支持三种选取模式:单选取、单间隔选取和多间隔选取。

JList类把维护和绘制列表的工作委托给一个对象来完成。一个列表的模型维护一个对象列表,列表单元绘制器将这些对象绘制在列表单元中。

缺省情况下,列表单元绘制器是DefaultListCellRenderrer的实例,它绘制表17-1中列出的对象。图标和字符串按原样显示,而所有其他类型对象的绘制方式是:通过显示从这些对象的toString返回的字符串来绘制这些对象。

构造方法

JList()

构造一个使用空模型的 JList。

JList(ListModel dataModel)

构造一个 JList,使其使用指定的非 null 模型显示元素。

JList(Object[] listData)

构造一个 JList,使其显示指定数组中的元素。

JList(Vector> listData)

构造一个 JList,使其显示指定 Vector 中的元素。

常用方法

addListSelectionListener(ListSelectionListener listener)

为每次选择发生更改时要通知的列表添加侦听器。

addSelectionInterval(int anchor, int lead)

将选择设置为指定间隔与当前选择的并集。

createSelectionModel()

返回 DefaultListSelectionModel 实例。

getCellRenderer()

返回呈现列表项的对象。

getModel()

返回保存由 JList 组件显示的项列表的数据模型。

getSelectedIndex()

返回所选的第一个索引;如果没有选择项,则返回 -1。

getSelectedValue()

返回所选的第一个值,如果选择为空,则返回 null。

getSelectionModel()

返回当前选择模型的值。

isSelectionEmpty()

如果什么也没有选择,则返回 true。

setListData(Object[] listData)

根据一个 object 数组构造 ListModel,然后对其应用 setModel。

setListData(Vector> listData)

根据 Vector 构造 ListModel,然后对其应用 setModel。

setModel(ListModel model)

设置表示列表内容或“值”的模型,并在通知 PropertyChangeListener 之后清除列表选择。

setSelectedIndex(int index)

选择单个单元。

setSelectionMode(int selectionMode)

确定允许单项选择还是多项选择。

setSelectionModel(ListSelectionModel selectionModel)

将列表的 selectionModel 设置为非 null 的 ListSelectionModel 实现。

例 1:采用数组对象创建JList并设置JList背景颜色和边框

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Container;

import javax.swing.BorderFactory;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JPanel;

import javax.swing.border.Border;

public class JListBackground extends JPanel {

private static final Color lightBlue = new Color(153, 204, 255);

public JListBackground() {

super();

setBackground(lightBlue);

}

public static void addComponentsToPane(Container pane) {

String[] bruteForceCode = { "int count = 0",

"int m = mPattern.length();",

"int n = mSource .length();",

"outer:",

" ++count;",

" }",

" return count;",

"}"

};

JList list = new JList(bruteForceCode);

Border etch = BorderFactory.createEtchedBorder();

list.setBorder(BorderFactory.createTitledBorder(etch, "Brute Force Code"));

JPanel listPanel = new JPanel();

listPanel.add(list);

listPanel.setBackground(lightBlue);

list.setBackground(lightBlue);

pane.add(listPanel, BorderLayout.CENTER);

pane.setBackground(lightBlue);

}

public static void main(String[] args) {

JFrame frame = new JFrame("Brute Force Algorithm");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

addComponentsToPane(frame.getContentPane());

frame.pack();

frame.setSize(800, 600);

frame.setVisible(true);

}

}

例 2:采用Vector对象创建JList对象

import java.util.Vector;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JScrollPane;

public class StoringvalueinVectorandaddingthemintoJList {

public static void main(String[] a) {

JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Vector months = new Vector();

JList list = new JList(months);

//用Vector对象创建JList,可以在创建后增加内容,而采用数组创建则不可以

months.addElement("January");

months.addElement("December");

frame.add(new JScrollPane(list));

frame.setSize(300, 200);

frame.setVisible(true);

}

}

例 3:改变JList中值

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JScrollPane;

public class ModifyModelSampleModelAction {

static String labels[] = { "A", "B", "C", "D", "E", "F", "G" };

public static void main(String args[]) {

JFrame frame = new JFrame("Modifying Model");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Fill model

final DefaultListModel model = new DefaultListModel();

for (int i = 0, n = labels.length; i < n; i++) {

model.addElement(labels[i]);

}

JList jlist = new JList(model);

JScrollPane scrollPane1 = new JScrollPane(jlist);

frame.add(scrollPane1, BorderLayout.CENTER);

JButton jb = new JButton("add F");

jb.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent actionEvent) {

model.add(0, "First");

model.clear();

model.addElement("Last");

model.addElement("Last");

model.addElement("Last");

model.addElement("Last");

int size = model.getSize();

model.insertElementAt("Middle", size / 2);

model.set(0, "New First");

model.setElementAt("New Last", size - 1);

model.remove(0);

// model.removeAllElements();

// model.removeElement("Last");

// model.removeElementAt(size / 2);

// model.removeRange(0, size / 2);

}

});

frame.add(jb, BorderLayout.SOUTH);

frame.setSize(640, 300);

frame.setVisible(true);

}

}

例 4:向JList增加监听时间

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JScrollPane;

import javax.swing.event.ListDataEvent;

import javax.swing.event.ListDataListener;

public class ModifyModelSampleListDataListener {

static String labels[] = { "A", "B", "C", "D", "E", "F", "G" };

public static void main(String args[]) {

JFrame frame = new JFrame("Modifying Model");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Fill model

final DefaultListModel model = new DefaultListModel();

for (int i = 0, n = labels.length; i < n; i++) {

model.addElement(labels[i]);

}

JList jlist = new JList(model);

JScrollPane scrollPane1 = new JScrollPane(jlist);

frame.add(scrollPane1, BorderLayout.CENTER);

ListDataListener listDataListener = new ListDataListener() {

public void contentsChanged(ListDataEvent listDataEvent) {

appendEvent(listDataEvent);

}

public void intervalAdded(ListDataEvent listDataEvent) {

appendEvent(listDataEvent);

}

public void intervalRemoved(ListDataEvent listDataEvent) {

appendEvent(listDataEvent);

}

private void appendEvent(ListDataEvent listDataEvent) {

switch (listDataEvent.getType()) {

case ListDataEvent.CONTENTS_CHANGED:

System.out.println("Type: Contents Changed");

break;

case ListDataEvent.INTERVAL_ADDED:

System.out.println("Type: Interval Added");

break;

case ListDataEvent.INTERVAL_REMOVED:

System.out.println("Type: Interval Removed");

break;

}

DefaultListModel theModel = (DefaultListModel) listDataEvent.getSource();

System.out.println(theModel);

}

};

model.addListDataListener(listDataListener);

JButton jb = new JButton("add F");

jb.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent actionEvent) {

model.add(0, "First");

}

});

frame.add(jb,BorderLayout.SOUTH);

frame.setSize(640, 300);

frame.setVisible(true);

}

}

例 5:向JList中增加双击事件

import java.awt.BorderLayout;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JScrollPane;

public class JListLocationToIndexSample {

public static void main(String args[]) {

String labels[] = { "A", "B", "C", "D", "E", "F", "G", "H" };

JFrame frame = new JFrame("Selecting JList");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JList jlist = new JList(labels);

JScrollPane scrollPane1 = new JScrollPane(jlist);

frame.add(scrollPane1, BorderLayout.CENTER);

MouseListener mouseListener = new MouseAdapter() {

public void mouseClicked(MouseEvent mouseEvent) {

JList theList = (JList) mouseEvent.getSource();

if (mouseEvent.getClickCount() == 2) {

int index = theList.locationToIndex(mouseEvent.getPoint());

if (index >= 0) {

Object o = theList.getModel().getElementAt(index);

System.out.println("Double-clicked on: " + o.toString());

}

}

}

};

jlist.addMouseListener(mouseListener);

frame.setSize(350, 200);

frame.setVisible(true);

}

}

例 6:在JList中增加复选框和图片

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Component;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.GridLayout;

import java.awt.Rectangle;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.util.Enumeration;

import javax.swing.Icon;

import javax.swing.JButton;

import javax.swing.JCheckBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTree;

import javax.swing.ListCellRenderer;

import javax.swing.ListModel;

import javax.swing.ListSelectionModel;

import javax.swing.UIManager;

import javax.swing.border.EmptyBorder;

import javax.swing.plaf.ColorUIResource;

import javax.swing.plaf.metal.MetalIconFactory;

import javax.swing.tree.DefaultMutableTreeNode;

import javax.swing.tree.TreeCellRenderer;

public class CheckListExample extends JFrame {

public CheckListExample() {

super("CheckList Example");

String[] strs = { "swing", "home", "basic", "metal", "JList" };

final JList list = new JList(createData(strs));

// set "home" icon

Icon icon = MetalIconFactory.getFileChooserHomeFolderIcon();

((CheckableItem) list.getModel().getElementAt(1)).setIcon(icon);

list.setCellRenderer(new CheckListRenderer());

list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

list.setBorder(new EmptyBorder(0, 4, 0, 0));

list.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

int index = list.locationToIndex(e.getPoint());

CheckableItem item = (CheckableItem) list.getModel()

.getElementAt(index);

item.setSelected(!item.isSelected());

Rectangle rect = list.getCellBounds(index, index);

list.repaint(rect);

}

});

JScrollPane sp = new JScrollPane(list);

final JTextArea textArea = new JTextArea(3, 10);

JScrollPane textPanel = new JScrollPane(textArea);

JButton printButton = new JButton("print");

printButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

ListModel model = list.getModel();

int n = model.getSize();

for (int i = 0; i < n; i++) {

CheckableItem item = (CheckableItem) model.getElementAt(i);

if (item.isSelected()) {

textArea.append(item.toString());

textArea.append(System.getProperty("line.separator"));

}

}

}

});

JButton clearButton = new JButton("clear");

clearButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

textArea.setText("");

}

});

JPanel panel = new JPanel(new GridLayout(2, 1));

panel.add(printButton);

panel.add(clearButton);

getContentPane().add(sp, BorderLayout.CENTER);

getContentPane().add(panel, BorderLayout.EAST);

getContentPane().add(textPanel, BorderLayout.SOUTH);

}

private CheckableItem[] createData(String[] strs) {

int n = strs.length;

CheckableItem[] items = new CheckableItem[n];

for (int i = 0; i < n; i++) {

items[i] = new CheckableItem(strs[i]);

}

return items;

}

class CheckableItem {

private String str;

private boolean isSelected;

private Icon icon;

public CheckableItem(String str) {

this.str = str;

isSelected = false;

}

public void setSelected(boolean b) {

isSelected = b;

}

public boolean isSelected() {

return isSelected;

}

public String toString() {

return str;

}

public void setIcon(Icon icon) {

this.icon = icon;

}

public Icon getIcon() {

return icon;

}

}

class CheckListRenderer extends CheckRenderer implements ListCellRenderer {

Icon commonIcon;

public CheckListRenderer() {

check.setBackground(UIManager.getColor("List.textBackground"));

label.setForeground(UIManager.getColor("List.textForeground"));

commonIcon = UIManager.getIcon("Tree.leafIcon");

}

public Component getListCellRendererComponent(JList list, Object value,

int index, boolean isSelected, boolean hasFocus) {

setEnabled(list.isEnabled());

check.setSelected(((CheckableItem) value).isSelected());

label.setFont(list.getFont());

label.setText(value.toString());

label.setSelected(isSelected);

label.setFocus(hasFocus);

Icon icon = ((CheckableItem) value).getIcon();

if (icon == null) {

icon = commonIcon;

}

label.setIcon(icon);

return this;

}

}

public static void main(String args[]) {

try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

} catch (Exception evt) {}

CheckListExample frame = new CheckListExample();

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

frame.setSize(300, 200);

frame.setVisible(true);

}

}

class CheckRenderer extends JPanel implements TreeCellRenderer {

protected JCheckBox check;

protected TreeLabel label;

public CheckRenderer() {

setLayout(null);

add(check = new JCheckBox());

add(label = new TreeLabel());

check.setBackground(UIManager.getColor("Tree.textBackground"));

label.setForeground(UIManager.getColor("Tree.textForeground"));

}

public Component getTreeCellRendererComponent(JTree tree, Object value,

boolean isSelected, boolean expanded, boolean leaf, int row,

boolean hasFocus) {

String stringValue = tree.convertValueToText(value, isSelected,

expanded, leaf, row, hasFocus);

setEnabled(tree.isEnabled());

check.setSelected(((CheckNode) value).isSelected());

label.setFont(tree.getFont());

label.setText(stringValue);

label.setSelected(isSelected);

label.setFocus(hasFocus);

if (leaf) {

label.setIcon(UIManager.getIcon("Tree.leafIcon"));

} else if (expanded) {

label.setIcon(UIManager.getIcon("Tree.openIcon"));

} else {

label.setIcon(UIManager.getIcon("Tree.closedIcon"));

}

return this;

}

public Dimension getPreferredSize() {

Dimension d_check = check.getPreferredSize();

Dimension d_label = label.getPreferredSize();

return new Dimension(d_check.width + d_label.width,

(d_check.height < d_label.height ? d_label.height

: d_check.height));

}

public void doLayout() {

Dimension d_check = check.getPreferredSize();

Dimension d_label = label.getPreferredSize();

int y_check = 0;

int y_label = 0;

if (d_check.height < d_label.height) {

y_check = (d_label.height - d_check.height) / 2;

} else {

y_label = (d_check.height - d_label.height) / 2;

}

check.setLocation(0, y_check);

check.setBounds(0, y_check, d_check.width, d_check.height);

label.setLocation(d_check.width, y_label);

label.setBounds(d_check.width, y_label, d_label.width, d_label.height);

}

public void setBackground(Color color) {

if (color instanceof ColorUIResource)

color = null;

super.setBackground(color);

}

public class TreeLabel extends JLabel {

boolean isSelected;

boolean hasFocus;

public TreeLabel() {

}

public void setBackground(Color color) {

if (color instanceof ColorUIResource)

color = null;

super.setBackground(color);

}

public void paint(Graphics g) {

String str;

if ((str = getText()) != null) {

if (0 < str.length()) {

if (isSelected) {

g.setColor(UIManager

.getColor("Tree.selectionBackground"));

} else {

g.setColor(UIManager.getColor("Tree.textBackground"));

}

Dimension d = getPreferredSize();

int imageOffset = 0;

Icon currentI = getIcon();

if (currentI != null) {

imageOffset = currentI.getIconWidth()

+ Math.max(0, getIconTextGap() - 1);

}

g.fillRect(imageOffset, 0, d.width - 1 - imageOffset,

d.height);

if (hasFocus) {

g.setColor(UIManager

.getColor("Tree.selectionBorderColor"));

g.drawRect(imageOffset, 0, d.width - 1 - imageOffset,

d.height - 1);

}

}

}

super.paint(g);

}

public Dimension getPreferredSize() {

Dimension retDimension = super.getPreferredSize();

if (retDimension != null) {

retDimension = new Dimension(retDimension.width + 3,

retDimension.height);

}

return retDimension;

}

public void setSelected(boolean isSelected) {

this.isSelected = isSelected;

}

public void setFocus(boolean hasFocus) {

this.hasFocus = hasFocus;

}

}

}

class CheckNode extends DefaultMutableTreeNode {

public final static int SINGLE_SELECTION = 0;

public final static int DIG_IN_SELECTION = 4;

protected int selectionMode;

protected boolean isSelected;

public CheckNode() {

this(null);

}

public CheckNode(Object userObject) {

this(userObject, true, false);

}

public CheckNode(Object userObject, boolean allowsChildren,

boolean isSelected) {

super(userObject, allowsChildren);

this.isSelected = isSelected;

setSelectionMode(DIG_IN_SELECTION);

}

public void setSelectionMode(int mode) {

selectionMode = mode;

}

public int getSelectionMode() {

return selectionMode;

}

public void setSelected(boolean isSelected) {

this.isSelected = isSelected;

if ((selectionMode == DIG_IN_SELECTION) && (children != null)) {

Enumeration e = children.elements();

while (e.hasMoreElements()) {

CheckNode node = (CheckNode) e.nextElement();

node.setSelected(isSelected);

}

}

}

public boolean isSelected() {

return isSelected;

}

}

例 7:可编辑JList

import java.awt.Container;

import java.awt.Dimension;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.util.Vector;

import javax.swing.Box;

import javax.swing.BoxLayout;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JScrollPane;

import javax.swing.JSeparator;

import javax.swing.JTable;

import javax.swing.ListSelectionModel;

import javax.swing.SwingConstants;

import javax.swing.UIManager;

import javax.swing.table.DefaultTableModel;

public class EditableListExample extends JFrame {

public EditableListExample() {

super("Editable List Example");

String[] data = { "a", "b", "c", "d", "e", "f", "g" };

JList list = new JList(data);

JScrollPane scrollList = new JScrollPane(list);

scrollList.setMinimumSize(new Dimension(100, 80));

Box listBox = new Box(BoxLayout.Y_AXIS);

listBox.add(scrollList);

listBox.add(new JLabel("JList"));

DefaultTableModel dm = new DefaultTableModel();

Vector dummyHeader = new Vector();

dummyHeader.addElement("");

dm.setDataVector(strArray2Vector(data), dummyHeader);

JTable table = new JTable(dm);

table.setShowGrid(false);

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

JScrollPane scrollTable = new JScrollPane(table);

scrollTable.setColumnHeader(null);

scrollTable.setMinimumSize(new Dimension(100, 80));

Box tableBox = new Box(BoxLayout.Y_AXIS);

tableBox.add(scrollTable);

tableBox.add(new JLabel("JTable"));

Container c = getContentPane();

c.setLayout(new BoxLayout(c, BoxLayout.X_AXIS));

c.add(listBox);

c.add(new JSeparator(SwingConstants.VERTICAL));

//c.add(new JLabel("test"));

//c.add(new JSeparator(SwingConstants.HORIZONTAL));

c.add(tableBox);

setSize(220, 130);

setVisible(true);

}

private Vector strArray2Vector(String[] str) {

Vector vector = new Vector();

for (int i = 0; i < str.length; i++) {

Vector v = new Vector();

v.addElement(str[i]);

vector.addElement(v);

}

return vector;

}

public static void main(String[] args) {

final EditableListExample frame = new EditableListExample();

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

}

java jlist_Swing开发之JList篇相关推荐

  1. java jcombobox 样式_Swing开发之JComboBox篇

    JList和ComboBox很相似,因为这两个组件都显示一个项列表.因此,它们都有扩展ListModel接口的模型.而且,这两个组件都有绘制器,这些绘制器通过实现ListCellBenderer接口来 ...

  2. Jmeter Kafka插件开发之Sampler篇

    Jmeter Kafka插件开发之Sampler篇 背景:在项目中经常需要往kafka里面写数据,并拿生成的数据执行后续的操作,并且有些接口中也需要用到kafka里的数据,小编使用JMeter做接口测 ...

  3. 微信开发 ━━ 微信商户v3微信支付H5方式开发之php篇

    native方式开发纪要:<微信开发 ━━ 微信商户native方式支付v3开发之php篇> 一.流程 流程是必须要弄懂的,弄懂之后遇到问题也能知道出在哪里. 官方说明:<H5支付统 ...

  4. 视频教程-跟着王进老师学开发之C#篇:基础语法-C#

    跟着王进老师学开发之C#篇:基础语法 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ¥208.00 ...

  5. 跟着王进老师学开发之C#篇:基础语法-王进-专题视频课程

    跟着王进老师学开发之C#篇:基础语法-10520人已学习 课程介绍         本次课程是初级课程,只要熟悉计算机的基本应用和操作,都可以完成本次课程学习.本课程深入浅出的介绍了C#语言的基本语法 ...

  6. 跟着王进老师学开发之C#篇第五季:图书管理系统-王进-专题视频课程

    跟着王进老师学开发之C#篇第五季:图书管理系统-2659人已学习 课程介绍         本季视频通过完整的案例介绍了图书管理系统的开发,包含了数据库的设计.界面设计.代码实现等等,本系统的模块包含 ...

  7. 跟着王进老师学开发之Python篇第一季:基础入门篇-王进-专题视频课程

    跟着王进老师学开发之Python篇第一季:基础入门篇-2859人已学习 课程介绍         本季课程首先对Python简要介绍,然后演示如何搭建Python的开发环境,以及如何在IDE中调试Py ...

  8. 视频教程-跟着王进老师学开发之Python篇第一季:基础入门篇-Python

    跟着王进老师学开发之Python篇第一季:基础入门篇 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ...

  9. JAVA游戏开发之FPS精准控制

    目录 JAVA游戏开发之FPS精准控制... 1 1       概述... 2 1.1        编写目的... 3 2       FPS精准控制... 3 2.1        FPS描述. ...

最新文章

  1. IntelliJ IDEA 2019.3发布,饱受性能诟病的2019.2版本终于成为过去式
  2. 禁用TwebBrowser右键
  3. 陈慧琳的10招不节食瘦身法 - 健康程序员,至尚生活!
  4. c++ array赋值问题
  5. 常见的时间复杂度函数
  6. Linux之apache服务搭建以及浅析web安全
  7. Sql Server函数全解(五)之系统函数
  8. 升级到AppCompat v22.1.0,现在获得IllegalArgumentException:AppCompat不支持当前的主题功能
  9. AMEsim:车辆动力经济性建模分析三个分享点
  10. FLTK--轻量级C++跨平台GUI库
  11. html制作带有尖角的边框,纯CSS3制作带尖角的气泡对话框实例特效代码
  12. 51单片机LCD1602液晶屏调试工具
  13. 莫名骨痛,警惕骨转移
  14. js 根据链接生成二维码
  15. JAVA中浮点数取整数部分和取小数部分
  16. 基于SRGAN的图像超分辨率处理
  17. 计算机网络管理存在薄弱环节,计算机网络管理思考
  18. java接口面试题_7道经典Java接口面试题
  19. QUANT[2]:量化交易策略基本框架搭建
  20. Delphi 修改TreeView的节点高度

热门文章

  1. 实际开发中 dao、entity的代码怎样自动生成?一款工具送给你
  2. 高性能异步批量ping的golang实现
  3. css display: inline-block 去间隙
  4. 【Java】计算1+1/2!+1/3!+1/4!....前20项
  5. [ACTF2020 新生赛]Include
  6. 团队建设及管理上的举措_为什么在副项目上工作是您作为开发人员的最佳举措...
  7. 深度学习去燥学习编码_通过编码学习编码
  8. mysql服务启动失败 Starting MySQL. ERROR! The server quit without updating PID file
  9. 这几个冷门却实用的 Python 库,我爱了!
  10. 贝叶斯参数估计的理解及其在电商算法中的应用