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

JList泛型缺失:无法调用自定义Character类的getName方法

解决DefaultListModel无法调用Character.getName()的问题

问题核心:代码中DefaultListModel未指定泛型,导致model1.get(index)返回Object类型,无法直接调用自定义Character类的getName()方法。以下是具体修改步骤:


关键修改点

  • 指定DefaultListModel泛型:将DefaultListModel的声明和实例化都指定为<Character>,让模型明确存储的是Character对象
  • 修正JList泛型:JList的泛型要和模型一致,从JList<String>改为JList<Character>
  • 移除冗余注解:泛型明确后,不再需要@SuppressWarnings("unchecked")
  • 规范类名:Java类名首字母需大写,将参数中的List<character>改为List<Character>

修改后的完整代码

import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class fenetre extends JFrame {
    private JList<Character> list1, list2;
    private JLabel label;
    private JPanel panel;
    private DefaultListModel<Character> model1, model2;

    public fenetre(List<Character> eq1, List<Character> eq2) {
        super("JList Example");
        setLayout(new BorderLayout());

        model1 = new DefaultListModel<>();
        for (Character character : eq1) {
            model1.addElement(character);
        }
        
        list1 = new JList<>(model1);
        list1.setVisibleRowCount(2);
        list1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        add(new JScrollPane(list1), BorderLayout.WEST);

        model2 = new DefaultListModel<>();
        for (Character character : eq2) {
            model2.addElement(character);
        }
        
        list2 = new JList<>(model2);
        list2.setVisibleRowCount(2);
        list2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        add(new JScrollPane(list2), BorderLayout.EAST);

        panel = new JPanel();
        panel.setBackground(Color.WHITE);
        add(panel, BorderLayout.SOUTH);

        label = new JLabel();
        panel.add(label);

        list1.addListSelectionListener(event -> {
            int index = list1.getSelectedIndex();
            if (index != -1) {
                label.setText("Selected player: " + model1.get(index).getName());
            }
        });

        list2.addListSelectionListener(event -> {
            int index = list2.getSelectedIndex();
            if (index != -1) {
                label.setText("Selected player: " + model2.get(index).getName());
            }
        });
    }
}

说明

  1. 泛型指定后,model1.get(index)会直接返回Character类型,无需强制类型转换,可直接调用getName()方法
  2. 用增强for循环替代传统索引循环,代码更简洁易读
  3. 修正后的代码符合Java泛型规范,避免了类型转换的潜在错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:55:39