首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JComponent绘画问题

JComponent绘画问题
EN

Stack Overflow用户
提问于 2013-01-28 12:29:54
回答 1查看 157关注 0票数 3

我试图在Java中创建一个自定义日历。为此,我扩展了javax.swing.JComponent

代码语言:javascript
复制
public class GMCalendar extends JComponent { ... }

在构造函数中,我做了一些基本的设置并加载了我的映像:

代码语言:javascript
复制
calendarDay = Toolkit.getDefaultToolkit().createImage(getClass().getResource("/resources/images/calendar_day.png"));

paintComponent中,它应该绘制我的日历,但它不会全部绘制,这看起来很奇怪。

代码语言:javascript
复制
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()

代码语言:javascript
复制
GMContainerFrame cf = new GMContainerFrame();
cf.setMinimumSize(new Dimension(800,600));
cf.setVisible(true);

这是来自GMContainerFrame的构造函数(它不使用LayoutManager!):

代码语言:javascript
复制
calendarFrame = new GMMiniFrame("Kalender", new GMCalendar(), 230);

GMMiniFrame扩展了JSplitPane

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-28 12:37:01

  • 不要重新发明轮子,使用JPanels,更好地用JLabels铺上GridLayout
  • 使用JLabels (JPanel nesting JComponents)没有理由使用paintComponents
  • 注意JLabel是透明的,non_opaque,
  • 使用JCalendar/JDatePickerSwingX,我最喜欢的是JCalendar作者:凯·托德,(没有问题的渲染,编辑器,特殊的日子,最小和最大日期)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14562081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档