如何使用GridLayout重新初始化面板?

时间:2017-10-25 09:17:34

标签: java layout awt layout-manager grid-layout

我正在编写一个小型日历应用程序,可让我管理我学习的重要日期和事件。我正在使用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的某个地方,但我无法理解。

有没有办法在不废弃整个布局的情况下手动定位组件?

0 个答案:

没有答案