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ます。