为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法在 JList 中使用 Enum?

有没有办法在 JList 中使用 Enum?

吃鸡游戏 2023-09-13 15:30:57
我知道JList有带有Stringand的构造函数DefaultListModel。我想找到一种将列表与enum类型一起使用的方法,例如JList<SomeEnum> jlist。有办法实现这一点吗?这是一个小的运行示例:import javax.swing.*;import java.awt.*;public class Example implements Runnable {    private JPanel jPanel;    private JFrame jFrame;    private JList<Algorithm> diagnosisList;    public static void main(String[] args) {        EventQueue.invokeLater(new Example());    }    @Override    public void run() {        jFrame = new JFrame();        jPanel = new JPanel();        jPanel.setLayout(new FlowLayout());        jFrame.getContentPane().add(jPanel);        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);        jPanel.setPreferredSize(new Dimension(500, 300));        DefaultListModel defaultListModel = new DefaultListModel();        defaultListModel.add(0, "Decision Tree");        defaultListModel.add(1, "Random Forest");        diagnosisList = getJList(defaultListModel);        jPanel.add(diagnosisList);        jFrame.pack();        jFrame.setVisible(true);    }    // I want to use Algorithm enum for parameter instaed of DefaultListModel    private JList<Algorithm> getJList(DefaultListModel algorithms) {        JList<Algorithm> jlist = new JList<Algorithm>(algorithms);        return jlist;    }    enum Algorithm {        DECISION_TREE_CLASSIFIER_DIAGNOSTIC("Decision Tree Classifier (D)", "Diagnostic"),        RANDOM_FOREST_DIAGNOSTIC("Random Forest (D)", "Diagnostic"),        LOGISTIC_REGRESSION_DIAGNOSTIC("Logistic Regression (D)", "Diagnostic"),        K_MEANS_DIAGNOSTIC("KMeans (D)", "Diagnostic");        private final String name;        private final String type;        Algorithm(final String name, final String type) {            this.name = name;            this.type = type;        }        @Override public String toString() {            return name;        }    }}
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您可以像任何其他数组一样将 an 的值添加enum到 a 中。JList例如:


public class Example implements Runnable {

    private JPanel jPanel;

    private JFrame jFrame;

    private JList<Algorithm> diagnosisList;

    private DefaultListModel<Algorithm> model;


    public static void main(String[] args) {

        EventQueue.invokeLater(new Example());

    }


    @Override

    public void run() {

        jFrame = new JFrame();

        jPanel = new JPanel();

        jPanel.setLayout(new FlowLayout());

        jFrame.getContentPane().add(jPanel);

        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        jPanel.setPreferredSize(new Dimension(500, 300));

        model = new DefaultListModel<>();

        diagnosisList = new JList<Algorithm>(model);


        for (Algorithm a : Algorithm.values())

            model.addElement(a);


        jPanel.add(diagnosisList);


        jFrame.pack();

        jFrame.setVisible(true);

    }


    public static enum Algorithm {

        BFS, DFS, A_STAR

    }

}

如果您不喜欢它的渲染方式,您可以随时添加自己的ListCellRenderer:


diagnosisList.setCellRenderer(new DefaultListCellRenderer() {

    private static final long serialVersionUID = 1L;


    @Override

    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,

            boolean cellHasFocus) {

        JLabel renderer = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

        renderer.setText(renderer.getText().toLowerCase()); //something

        return renderer;

    }

});


查看完整回答
反对 回复 2023-09-13
  • 1 回答
  • 0 关注
  • 61 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信