我试图在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。
发布于 2013-01-28 12:37:01
JPanels,更好地用JLabels铺上GridLayoutJLabels (JPanel nesting JComponents)没有理由使用paintComponentsJLabel是透明的,non_opaque,JCalendar/JDatePicker从SwingX,我最喜欢的是JCalendar作者:凯·托德,(没有问题的渲染,编辑器,特殊的日子,最小和最大日期)https://stackoverflow.com/questions/14562081
复制相似问题