gpt4 book ai didi

java - JComponent 绘画问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:27 26 4
gpt4 key购买 nike

我正在尝试用 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);
}
}
}

结果要么什么都没有,要么像这样:

Weird calendar

似乎 paintComponent组件的尺寸大于 1x1 之前被调用。

这是在我的 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

最佳答案

  • 不要重新发明轮子,使用JPanels,最好使用GridLayout

    铺设的JLabels<
  • 通过使用 JLabels(JPanel 嵌套多个 JComponents)没有理由使用 paintComponents

  • 注意 JLabel 是透明的,non_opaque,

  • 使用 SwingXJCalendar/JDatePicker,我最喜欢的是 JCalendar by Kai Toedter ,(渲染器、编辑器、特殊日子、最小和最大日期没有问题)

关于java - JComponent 绘画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14562081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com