Java J组件绘画问题
我正在尝试用Java创建一个自定义日历。为此,我扩展了Java J组件绘画问题,java,swing,jcomponent,jcalendar,Java,Swing,Jcomponent,Jcalendar,我正在尝试用Java创建一个自定义日历。为此,我扩展了javax.swing.JComponent public class GMCalendar extends JComponent { ... } 在构造器中,我进行一些基本设置并加载图像: calendarDay = Toolkit.getDefaultToolkit().createImage(getClass().getResource("/resources/images/calendar_day.png")); 在paintCo
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);
}
}
}
这是来自GMContainerFrame
的构造函数(它不使用LayoutManager
!):
GMMiniFrame
扩展了JSplitPane
- 不要重新发明轮子,使用
,最好使用JPanels
按JLabels
GridLayout
- 通过使用
(JLabels
嵌套多个JPanel
),没有理由JComponents
paintComponents
- 注意
是透明的、非不透明的JLabel
- 使用
中的SwingX
/JCalendar
,我最喜欢的是,(渲染器、编辑器、特殊日期、最小和最大日期没有问题)JDatePicker
setPreferredSize
而是重写getPreferredSize()
我应该说些别的话吗?你不应该写calendar.add(calendar.MONTH,currentMonth)代码>在paintComponent()
中,因为系统在重新绘制时将调用paintComponent()
。你一直在添加不好的内容。+1,尤其是第一条和最后一条评论。人们没有意识到制作一个健壮的日历组件有多么困难。还要看看哪个是上述组件的替代品。
GMContainerFrame cf = new GMContainerFrame();
cf.setMinimumSize(new Dimension(800,600));
cf.setVisible(true);
calendarFrame = new GMMiniFrame("Kalender", new GMCalendar(), 230);