【发布时间】:2013-12-09 02:56:54
【问题描述】:
我试图只让 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() 方法,以便这是填充组合框的唯一方法?任何帮助将不胜感激。 注意:几天前我问了一个类似的问题,有人建议我修改我的代码。这是我的新尝试。我是一个初学者,所以欢迎任何和所有的建议。干杯
【问题讨论】:
-
将
Course对象直接添加到组合框 -
我可以这样做,但随后所有内容都显示在组合框中。有没有办法限制只有 courseNum 显示?
-
It has been suggested that using ListCellRenderer would help me to achieve this.- 你被告知这只是答案的一半,仅仅使用渲染器会破坏组合框的其他功能。Is there a way to limit so that only the courseNum shows?- 当你昨天问同样的问题时,你得到了答案。您可以轻松获取指向的代码并对代码进行两行更改。 -
这就是
ListCellRenderer的用途,现在您可以通过value的value参数访问Course对象 -
我已经尝试实现这一点。我接受了单独开设课程的建议。我已经阅读了文档并使用了示例,但我仍然无法达到预期的结果。
标签: java jcombobox listcellrenderer