SchoolYearモデルリストの要素が適切に
public class SchoolYear {
int id;
int start;
int end;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
}
SchoolYearDaoImplクラスメソッド
public List<SchoolYear> getAllSchoolYearStart() {
String SQL = "{CALL getAllSchoolYearInfo()}";
SchoolYear schoolyear = new SchoolYear();
List<SchoolYear> list = new ArrayList<>();
try(Connection con = DBUtil.getConnection(DBType.MYSQL);
CallableStatement cs = con.prepareCall(SQL);){
try(ResultSet rs = cs.executeQuery();){
while(rs.next()){
schoolyear.setStart(rs.getInt("yearFrom"));
list.add(schoolyear);
}
JOptionPane.showMessageDialog(null,list.size());
for(int x=0; x<list.size(); x++){
JOptionPane.showMessageDialog(null,((SchoolYear)list.get(x)).getStart());
}
}
}catch(SQLException e){
JOptionPane.showMessageDialog(null,e.getMessage());
}
return list;
}
を蓄積していない私は、ストアドプロシージャgetAllSchoolYearInfo()
を呼び出すことによって取得した結果セットは、yearFrom列の2行を示してい。私は私のGUI上で何を参照するには、プログラムを実行したとき
しかし、私は、行2の値になるように見える私のJComboBox
で2つの値を取得
ご覧のとおり、リストのサイズを取得して、格納されているオブジェクトの数を確認しようとしました。だから私はオブジェクトがこのコードブロックのList<SchoolYear>
にどのように格納され蓄積されているかに問題があると推測しています。
try(ResultSet rs = cs.executeQuery();){
while(rs.next()){
schoolyear.setStart(rs.getInt("yearFrom"));
list.add(schoolyear);
}
JOptionPane.showMessageDialog(null,list.size());
for(int x=0; x<list.size(); x++){
JOptionPane.showMessageDialog(null,((SchoolYear)list.get(x)).getStart());
}
}
私のListCellRenderer
に問題がありますか?私はそうは思わない。
jcmbSchoolYearStart.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(value instanceof SchoolYear){
SchoolYear schoolyear = (SchoolYear) value;
setText(""+schoolyear.getStart());
}
return this;
}
});
どのような考えですか?
ありがとうございました。
あなたはその後、 'List'が繰り返さに追加されているデータベースから、それぞれの結果によって更新されてされて、あなたの' getAllSchoolYearStart'方法でSchoolYear' 'の単一のインスタンスを使用しているが、それはまだです同じインスタンス。代わりに、 'while(rs.next()){'ループの中に 'SchoolYear'の新しいインスタンスを作成してください。 – MadProgrammer
[なぜ、私のArrayListはリストに最後に追加されたN個のコピーを含んでいますか?](http: /stackoverflow.com/questions/19843506/why-does-my-arraylist-contain-n-copies-of-the-last-item-added-to-the-list) – 4castle