是否有在JList中使用Enum的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有在JList中使用Enum的方法相关的知识,希望对你有一定的参考价值。
我知道JList具有带有String
和DefaultListModel
的构造函数。我想找到一种使用枚举类型的JList的方法,例如JLisl<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;
}
}
}
答案
您可以像其他数组一样将enum
的值添加到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;
}
});
以上是关于是否有在JList中使用Enum的方法的主要内容,如果未能解决你的问题,请参考以下文章
是否可以更改 Java Swing jList 中项目的名称*显示*?
C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法