3

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

4

1 に答える 1

4
  • 車輪の再発明をしないでJPanelsくださいJLabelsGridLayout

  • JLabelsJPanel複数のネスト)を使用することによりJComponents、理由はありませんpaintComponents

  • 通知JLabelは透明、不透明ではなく、

  • use JCalendar/ JDatePickerfrom SwingX、私のお気に入りはKai ToedterのJCalendarです(レンダラー、エディター、特別な日、最小および最大の日付に問題はありません)

于 2013-01-28T12:37:01.420 に答える