Java GridLayout在三个相同Panel中,只有一个显示正确了,请大神进来看看

IWontQuit IWontQuit 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我编写了一个日历的程序,在一个Panel上初始化三个相同的日历,这三个日历的panel都设置为Gridlayout(6,7)布局,为什么只有一个panel显示正确了,其他的都少显示一列?
private class JP3 extends JPanel{
private static final long serialVersionUID = 1L;
private int offset=0;
private LabelManager labelmanager;
public JP3(int pos){
// super(new GridLayout(6,7));
this.setLayout(new GridLayout(6,7));
this.setPreferredSize(new Dimension(width,170));
offset=pos-1;
labelmanager=lm[pos];
initJP3();
}
private void initJP3(){
updateDate();
}
public void updateDate(){
this.removeAll();
labelmanager.clear();
Date temp=select.getTime();
Calendar select=Calendar.getInstance();
select.setTime(temp);
select.add(Calendar.MONTH, offset); //根据offset改变日期
select.set(Calendar.DAY_OF_MONTH,1);
int index=select.get(Calendar.DAY_OF_WEEK);
for(int n=0;n<index;n++){ //在本月1号开始之前添加空白标签
JLabel blank=new JLabel();
this.add(blank);
}
int sum=select.getActualMaximum(Calendar.DAY_OF_MONTH);
for(int i=0;i<sum;i++){

labelmanager.addLabel(new MyLabel(select.get(Calendar.YEAR),
select.get(Calendar.MONTH),select.get(Calendar.DAY_OF_MONTH),offset));
select.add(Calendar.DAY_OF_MONTH,1);
}
for(MyLabel my:labelmanager.getLabels()){
this.add(my);
}
select.setTime(temp); //恢复到当前日期
}
}
private class MyLabel extends JLabel implements Comparator<MyLabel>,MouseListener{
/**
*
*/
private static final long serialVersionUID = 1L;
private int year,month,day;
private boolean isSelected;
private int offset;
@SuppressWarnings("unused")
public MyLabel(){

}
public MyLabel(int year,int month,int day,int offset){
super(""+day,JLabel.CENTER);
this.offset=offset;
this.year=year;
this.day=day;
this.month=month;
this.setFont(font);
}
}
private class LabelManager{
private List<MyLabel> list;
public LabelManager(){
list=new ArrayList<MyLabel>();
}
public void addLabel(MyLabel my){
list.add(my);
}
}


...全文
评论 3
收藏 已收藏
分享
返回顶部
IWontQuit
Java 51,407 成员 86,128 内容