You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取Student对象信息并在Swing GUI窗口中展示?

解决步骤

1. 给Student类添加Getter方法

确保Student类(包括继承自PersonInfo的属性)有对应的Getter方法,才能获取对象的属性值:

// PersonInfo父类示例(补全Getter)
public class PersonInfo {
    protected String name;
    protected String title;
    protected String imageFile;

    // 构造方法省略
    public String getName() { return name; }
    public String getTitle() { return title; }
    public String getImageFile() { return imageFile; }
}

// Student子类示例(补全Getter)
public class Student extends PersonInfo {
    private String group;
    private String demoWhat;

    // 构造方法省略
    public String getGroup() { return group; }
    public String getDemoWhat() { return demoWhat; }
}

2. GUI2按钮事件传递Student对象到GUI3

在GUI2的按钮点击事件中,创建Student对象后,直接将其传入GUI3的构造方法:

// GUI2按钮点击逻辑示例
JButton showInfoBtn = new JButton("查看学生信息");
showInfoBtn.addActionListener(e -> {
    // 创建Student实例(参数根据实际构造方法调整)
    Student targetStudent = new Student("李四", "前端实习生", "lisi.png", "UI/UX组", "演示Vue3组件封装");
    // 弹出GUI3并传入对象
    new GUI3(targetStudent).setVisible(true);
});

3. GUI3接收对象并展示内容

修改GUI3的构造方法,接收Student对象,用JLabel分别展示文本和图片:

public class GUI3 extends JFrame {
    public GUI3(Student student) {
        // 窗口基础配置
        setTitle("学生详情");
        setLayout(new BorderLayout());
        setSize(450, 550);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);

        // 文本信息面板
        JPanel textPanel = new JPanel(new GridLayout(4, 1, 5, 5));
        textPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
        textPanel.add(new JLabel("姓名:" + student.getName()));
        textPanel.add(new JLabel("职位:" + student.getTitle()));
        textPanel.add(new JLabel("组别:" + student.getGroup()));
        textPanel.add(new JLabel("演示内容:" + student.getDemoWhat()));
        add(textPanel, BorderLayout.NORTH);

        // 图片展示标签
        JLabel imgLabel = new JLabel();
        try {
            // 缩放图片适配窗口,避免拉伸变形
            Image originImg = new ImageIcon(student.getImageFile()).getImage();
            Image scaledImg = originImg.getScaledInstance(400, 380, Image.SCALE_SMOOTH);
            imgLabel.setIcon(new ImageIcon(scaledImg));
        } catch (Exception ex) {
            imgLabel.setText("图片加载失败");
        }
        add(imgLabel, BorderLayout.CENTER);
    }
}

注意点

  • 图片路径尽量用项目相对路径,或者通过getClass().getResource(student.getImageFile())加载资源文件,避免绝对路径导致的加载失败。
  • 如果属性可能为空,展示前加非空判断,比如student.getName() != null ? student.getName() : "未填写",防止空指针异常。

内容的提问来源于stack exchange,提问作者Xena BlueIce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:40:31