我正在尝试用 Java 创建一个自定义日历。为此,我扩展javax.swing.JComponent
.
public class GMCalendar extends JComponent { ... }
在我的构造函数中,我做了一些基本设置并加载我的图像:
calendarDay = Toolkit.getDefaultToolkit().createImage(getClass().getResource("/resources/images/calendar_day.png"));
它应该画我paintComponent
的日历,但它不会全部画,这看起来很奇怪。
public void paintComponent(Graphics g) {
super.paintComponent(g);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, currentMonth);
int numberOfWeeks = calendar.getActualMaximum(Calendar.WEEK_OF_MONTH);
for (int i = 0; i < 7; i++) {
for (int j = 0; j < numberOfWeeks; j++) {
int x = i * (DAY_SIZE + DAY_SPACE);
int y = j * (DAY_SIZE + DAY_SPACE);
g.drawImage(calendarDay, x, y, null);
}
}
}
结果要么什么都没有,要么是这样的:
似乎在组件的大小大于1x1之前paintComponent
被调用。
这是在我的main()
:
GMContainerFrame cf = new GMContainerFrame();
cf.setMinimumSize(new Dimension(800,600));
cf.setVisible(true);
这是来自GMContainerFrame
(不使用LayoutManager
!)的构造函数:
calendarFrame = new GMMiniFrame("Kalender", new GMCalendar(), 230);
GMMiniFrame
延伸JSplitPane
。