0

コンボボックスに表示する 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() メソッドにアクセスして、それがコンボボックスに入力される唯一のものになるようにするにはどうすればよいですか? どんな助けでも大歓迎です。注: 数日前に同様の質問をしたところ、コードを修正するよう提案されました。これが私の新しい試みです。私は初心者なので、どんな提案でも大歓迎です。乾杯

4

1 に答える 1