我正在编写一个小型日历应用程序,可让我管理我学习的重要日期和事件。我正在使用java.awt。
将一个月绘制到具有7 * 7 BorderLayout的面板上。程序启动时,使用以下方法绘制面板:
public void drawCalendarP(String dateS){
if(mf != null && calendarP != null){
mf.remove(calendarP);
calendarP.removeAll();
}
calendarP = new Panel();
calendarP.setLayout(new GridLayout(7,7,10,10));
//...
day[0] = new Button("1");
day[0].addActionListener(...);
day[0].setVisible(true);
calendarP.add(day[0]);
/*each day of the month is represented by a button. I've put the
initialization of the 'Day-buttons' in its own method which is called
frome here, but this is basically what it does.*/
//...
mainframe.add(calendarP);
}
}
现在,当我启动程序并首先调用此方法时,一切都按预期工作。但是,我添加了一个按钮,可以让您在个别月份之间切换,这就是出现问题的地方。
因为为了画一个新月,我决定再次调用方法drawCalenderP()
,但使用不同的String dateS
。而且,如果你在程序开始之前手动输入这个String,它会很乐意在你想要的任何月份画出你。
但是,如果我使用所述按钮再次调用该方法,它将执行以下操作:
我不知道为什么会这样。它应该添加新组件,就像它第一次调用方法时那样,但组件不会显示在面板上。
事情是;如果我在没有 GridLayout的帮助下绘制按钮,让我们说setSize(w,x)
和setLocation(y,z)
,一切都会再次正常工作。所以问题出在GridLayout的某个地方,但我无法理解。
有没有办法在不废弃整个布局的情况下手动定位组件?