我试图只让 ArrayList 元素中的第一项显示在组合框中。有人建议使用 ListCellRenderer 可以帮助我实现这一目标。我已经尝试过,但无法访问必要的 getCourseNum() 方法来显示。我的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class CourseCon extends JPanel {
private static JPanel editPanel;
private JComboBox<String> editComboLevel;
private JComboBox editCombo;
private static ArrayList<Course> course = new ArrayList<Course>();
public CourseCon() {
Integer[] intArray = new Integer[course.size()];
for (int i = 0; i < course.size(); i++) {
intArray[i] = new Integer(i);
}
editPanel = new JPanel();
editPanel.setPreferredSize(new Dimension(100,70));
editPanel.add(editCombo = new JComboBox(intArray));
ComboBoxRenderer renderer= new ComboBoxRenderer();
editCombo.setRenderer(renderer);
editCombo.setSelectedIndex(0);
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("Example of Code Snippet");
JComponent newContentPane = new CourseCon();
newContentPane.setOpaque(true);
frame.add(editPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setPreferredSize(new Dimension(120,80));
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
course.add(new Course("Course-1", "Description-1",
1, 2, "Level 1"));
course.add(new Course("Course-2", "Description-2",
3, 4, "Level 2"));
createAndShowGUI();
for(Course item : course)
System.out.println(item);
}
});
}
class ComboBoxRenderer extends JLabel
implements ListCellRenderer {
public ComboBoxRenderer() {
setOpaque(true);
setHorizontalAlignment(CENTER);
setVerticalAlignment(CENTER);
}
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
int selectedIndex = ((Integer)value).intValue();
//String course = courseArray[selectedIndex];
//I couldn't get this to work
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
//I put this in to test and it does show two times
//makes me think if I could just access getCourseNum()
//I'd have it. Correct me if I'm wrong please
setText("Testing");
return this;
}
}
}
这是我正在使用的课程:
import java.util.*;
public class Course {
private String courseNum, courseTitle, courseLevel;
private int courseDur, courseFee;
Course() {}
Course(String courseNum, String courseTitle, int courseDur,
int courseFee, String courseLevel) {
this.courseNum = courseNum;
this.courseTitle = courseTitle;
this.courseDur = courseDur;
this.courseFee = courseFee;
this.courseLevel = courseLevel;
}
@Override
public String toString() {
String courseInfo = this.getCourseNum()+ ", "+this.getCourseTitle()+", "
+this.getCourseDur()+", "+this.getCourseFee()+", "+this.getCourseLevel();
return courseInfo;
}
public String getCourseNum() {
return this.courseNum;
}
public String getCourseTitle() {
return this.courseTitle;
}
public int getCourseDur() {
return this.courseDur;
}
public int getCourseFee() {
return this.courseFee;
}
public String getCourseLevel() {
return this.courseLevel;
}
public void setCourseNum(String courseNum) {
this.courseNum = courseNum;
}
public void setCourseTitle(String courseTitle) {
this.courseTitle = courseTitle;
}
public void setCourseDur(int courseDur) {
this.courseDur = courseDur;
}
public void setCourseTitle(int courseFee) {
this.courseFee = courseFee;
}
public void setCourseLevel(String courseLevel) {
this.courseLevel = courseLevel;
}
}
我已经尝试了几天,但我在这里未知的水域游泳。如何访问 getCourseNum() 方法,以便这是填充组合框的唯一方法?任何帮助将不胜感激。注意:几天前我问了一个类似的问题,有人建议我修改我的代码。这是我的新尝试。我是一个初学者,所以欢迎任何和所有的建议。干杯