想问问我这个代码就是在窗口中增加组件,但是出现未知错误了,想问问怎么解决,歇歇
卓业要求的图是这个
import javax.swing.*;
class Demo6__4 extends JFrame{
JLabel lbl1,lbl2,lbl3;//标签
JFrame jFrame ;
JCheckBox cb1,cb2,cb3,cb4,cb5;//单选框
JRadioButton jrb1,jrb2,jrb3,jrb4,jrb5;//单选按钮
JButton btn1,btn2;
JTextField txt;
void Display(){
jFrame = new JFrame("个人信息调查");
lbl1 = new JLabel("年龄段:");
lbl2 = new JLabel("兴趣爱好:");
lbl3 = new JLabel("调查的结果为:");
cb1 = new JCheckBox("交友");
cb2 = new JCheckBox("户外");
cb3 = new JCheckBox("购物");
cb4 = new JCheckBox("旅游");
cb5 = new JCheckBox("其他");
jrb1 = new JRadioButton("5~15岁");
jrb2 = new JRadioButton("16~25岁");
jrb3 = new JRadioButton("26~35岁");
jrb4 = new JRadioButton("36~45岁");
jrb5 = new JRadioButton("46~55岁");
btn1 = new JButton("提交");
btn1 = new JButton("清空");
txt = new JTextField("");
jFrame.add(lbl1);
jFrame.add(jrb1);jFrame.add(jrb2);jFrame.add(jrb3);jFrame.add(jrb4);jFrame.add(jrb5);
jFrame.add(lbl2);
jFrame.add(cb1);jFrame.add(cb2);jFrame.add(cb3);jFrame.add(cb4);jFrame.add(cb5);
jFrame.add(lbl3);
jFrame.add(txt);
jFrame.add(btn1);
jFrame.add(btn2);
add(jFrame);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500,500);
setResizable(true);
setVisible(true);
}
}
public class Demo6_4 {
public static void main(String[] args) {
new Demo6__4().Display();
}
}
顺便想问问我这个代码有没有可以简洁的写法
我大概把你代码重构了一下,你可以作为参考
使用了更加常见的命名规范,将类名改为了“SurveyForm”,将 GUI 组件的变量名改为了小驼峰式命名法。同时,将原来的 Display() 方法分成了两个方法 initComponents() 和 setupLayout(),将 GUI 组件的创建和布局分别放置在这两个方法中,使得代码更加模块化和易读。此外,将 ButtonGroup 用来组合 JRadioButton 组件,将组件放置在不同的 JPanel 容器中,使用 BoxLayout 使得它们垂直排列,最后将这些容器放置在一个主容器中。这样,代码的结构更加清晰,易于维护。
import javax.swing.*;
public class SurveyForm extends JFrame {
private JLabel ageLabel, interestLabel, resultLabel;
private JCheckBox friendCheckbox, outdoorCheckbox, shoppingCheckbox, travelCheckbox, otherCheckbox;
private JRadioButton ageGroup1, ageGroup2, ageGroup3, ageGroup4, ageGroup5;
private JButton submitButton, clearButton;
private JTextField resultTextField;
public SurveyForm() {
super("个人信息调查");
initComponents();
setupLayout();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500,500);
setResizable(true);
setVisible(true);
}
private void initComponents() {
ageLabel = new JLabel("年龄段:");
interestLabel = new JLabel("兴趣爱好:");
resultLabel = new JLabel("调查的结果为:");
friendCheckbox = new JCheckBox("交友");
outdoorCheckbox = new JCheckBox("户外");
shoppingCheckbox = new JCheckBox("购物");
travelCheckbox = new JCheckBox("旅游");
otherCheckbox = new JCheckBox("其他");
ageGroup1 = new JRadioButton("5~15岁");
ageGroup2 = new JRadioButton("16~25岁");
ageGroup3 = new JRadioButton("26~35岁");
ageGroup4 = new JRadioButton("36~45岁");
ageGroup5 = new JRadioButton("46~55岁");
submitButton = new JButton("提交");
clearButton = new JButton("清空");
resultTextField = new JTextField();
}
private void setupLayout() {
ButtonGroup ageGroup = new ButtonGroup();
ageGroup.add(ageGroup1);
ageGroup.add(ageGroup2);
ageGroup.add(ageGroup3);
ageGroup.add(ageGroup4);
ageGroup.add(ageGroup5);
JPanel agePanel = new JPanel();
agePanel.add(ageLabel);
agePanel.add(ageGroup1);
agePanel.add(ageGroup2);
agePanel.add(ageGroup3);
agePanel.add(ageGroup4);
agePanel.add(ageGroup5);
JPanel interestPanel = new JPanel();
interestPanel.add(interestLabel);
interestPanel.add(friendCheckbox);
interestPanel.add(outdoorCheckbox);
interestPanel.add(shoppingCheckbox);
interestPanel.add(travelCheckbox);
interestPanel.add(otherCheckbox);
JPanel resultPanel = new JPanel();
resultPanel.add(resultLabel);
resultPanel.add(resultTextField);
JPanel buttonPanel = new JPanel();
buttonPanel.add(submitButton);
buttonPanel.add(clearButton);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.add(agePanel);
mainPanel.add(interestPanel);
mainPanel.add(resultPanel);
mainPanel.add(buttonPanel);
add(mainPanel);
}
public static void main(String[] args) {
new SurveyForm();
}
}
比方说我们的数据库中 user 表有以下几条数据:
id | uid | name |
---|---|---|
1 | user_003 | 法半夏 |
2 | user_001 | 蜜远志 |
3 | user_002 | 麦冬 |
4 | user_004 | 茵陈 |
我们需要 通过前端传来的参数 uid 列表 查询 其中的数据,然后返回给前端,但是前端传来的 uid 列表是 [“user_001”, “user_002”, “user_003” ,“user_004”] ,这时候,我们通过
SELECT uid,`name` from user where uid
IN('user_001','user_002','user_003','user_004');
查询出来的结果是这样的:
id | uid | name |
---|---|---|
1 | user_003 | 法半夏 |
2 | user_001 | 蜜远志 |
3 | user_002 | 麦冬 |
4 | user_004 | 茵陈 |
[
{"name":"法半夏","uid":"user_003"},
{"name":"蜜远志","uid":"user_001"},
{"name":"麦冬","uid":"user_002"},
{"name":"茵陈","uid":"user_004"}
]
可以看到传入的参数列表和返回的列表 uid 并不是对应的。
[
{"name":"蜜远志","uid":"user_001"},
{"name":"麦冬","uid":"user_002"},
{"name":"法半夏","uid":"user_003"},
{"name":"茵陈","uid":"user_004"}
]
为了解决这个问题,有多种方法,比方说在mybatis 中 先 使用 foreach 入参列表 再left join user 表, 但 这样的缺点是当参数列表较长的时候sql 语句可能很长,sql 语句解析可能会比较慢,占用网络带宽可能较大,总而言之就是可能存在 bug;
不想打字了,直接上代码
排序工具类:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Field;
import java.util.*;
/**
* @author: XiaTian
* @create-time 18:22 2021/11/14
*/
public class OrderUtil {
private static Logger logger = LoggerFactory.getLogger(OrderUtil.class);
/**
* 排序操作
* @param originList 数据库中查询出来的的列表,需要排序操作
* @param orderList 前端传来的参数列表
* @param orderField 需要排序的字段, 如: uid
* @param <T> 泛型
* @return
*/
public static <T> List<T> order(List<T> originList,
List<String> orderList,
final String orderField){
if (CollectionUtils.isEmpty(originList)){
logger.info("入参集合为空");
return originList;
}
Map<String,T> tempMap = new HashMap<>();
Field declaredField;
List<T> rtnList = new ArrayList<>();
try {
declaredField = originList.get(0).getClass().getDeclaredField(orderField);
declaredField.setAccessible(true);
for (T ele : originList){
String value = declaredField.get(ele).toString();
tempMap.put(value,ele);
}
for (String code : orderList){
rtnList.add(tempMap.get(code));
}
} catch (NoSuchFieldException e) {
logger.warn("没用指定字段[{}]",orderField);
} catch (IllegalAccessException e) {
logger.warn("访问字段非法,请检查字段[{}]权限",orderField);
}
return rtnList;
}
public static void main(String[] args) {
List<String> orderList = Arrays.asList("user_001","user_002","user_003","user_004");
List<User> userList = new ArrayList<>();
userList.add(new User(1,"user_003","法半夏"));
userList.add(new User(2,"user_001","蜜远志"));
userList.add(new User(3,"user_002","麦冬"));
userList.add(new User(4,"user_004","茵陈"));
List<User> orderedUsers = OrderUtil.order(userList, orderList, "uid");
System.out.println(orderedUsers);
}
}
user 类
package com.xhw.product.outman.util;
import lombok.Data;
/**
* @author: XiaTian
* @create-time 18:37 2021/11/14
*/
@Data
public class User {
private int id;
private String uid;
private String name;
public User(int id, String uid, String name) {
this.id = id;
this.uid = uid;
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", uid='" + uid + '\'' +
", name='" + name + '\'' +
'}';
}
}
我会尝试回答这个问题。
对于Java图形用户界面中未知报错的问题,一般来说是因为代码中存在错误,例如组件添加错误、空指针异常等。解决这个问题的步骤如下:
分析错误信息与代码,找到可能出错的部分。
采用日志等调试工具,逐个排查可能出错的变量、方法、组件等,定位并修复错误,直到程序可以正常运行。
如果代码量较大或复杂,适当引入单元测试和代码重构等工作流程,提高代码质量和可维护性。
同时,使用一些优秀的Java GUI框架也能帮助开发者更快地实现图形界面,例如Swing、JavaFX等。编写代码前,充分掌握相关框架的基础知识和API,有利于快速实现需求并降低出错率。
以上是我对这个问题的回答。如果有不足之处,请指出。