1.问题描述
今天在做数据库实习的时候,遇到了一个小问题。想要实现的效果如下:
问题是每个人核酸检测次数是不确定的,我们需要根据每个人的具体样本信息动态的生成上图的效果。想了第一个解决办法,想要生成两个表格,将查询到的数据填充到内层表格,再将生成的内层表格动态添加到外层表格里,但是因为没有找到将表格添加到表格里的方法,所以没有采用这个方案。
最后我采用了动态生成标签的方式,用for循环遍历数据list,每一次遍历的时候,都添加一个标签,并且给它设置各种属性:颜色,大小,坐标,值。
设置文字的时候,发现空格和换行转义字符对这个标签没有用,上网搜索了之后,才发现这个标签组件和html标签的格式居然差不多,要用 和<br>来实现空格和换行的操作。而且,添加空格的时候,最后一个要记得和下一个字符串之间空一个单位程度。
2.代码展示
public int fillLabel(JPanel panel_1, List<ST1> st1list) {
int i=0;
for (i=0;i<st1list.size();i++) {
JLabel lbl = new JLabel();
ST1 st1 = st1list.get(i);
String name = st1.getName();
String sid = st1.getSid();
String no = st1.getNo();
String strMsg1 = "  姓名:      "+name;
String strMsg2 = "  样本号:      "+sid;
String strMsg3 = "  检测序列:     "+no;
String strMsg = "<html><body>"+strMsg1+"<br>"+strMsg2+"<br>"+strMsg3+"<body></html>";
lbl.setText(strMsg);
lbl.setFont(new Font("宋体", Font.PLAIN, 14));
lbl.setBackground(new Color(255, 255, 255));
lbl.setOpaque(true);
lbl.setHorizontalAlignment(SwingConstants.LEFT);
lbl.setBounds(0, 66*i, 364, 55);
lbl.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
InnerAccess(e);
}
});
panel_1.add(lbl);
}
return i;
}
3.结果展示
就是外观还没有优化,样子很丑。