Я хотел создать календарь, который создает себя динамически в зависимости от месяца, на котором он основан.Сначала я создал фон, который будет использоваться в любые месяцы, и его размеры составляют 700x500 (700/7 для каждого дня и 500/5 для каждого месяца, но 28-дневный февраль, начинающийся в понедельник, имеет 5 строкнедель).Я сделал это с помощью следующих предложений:
public class Graph {
private final int sizeX = 700;
private final int sizeY = 500;
private Calendar calendar;
public Graph(Calendar calendar) {
this.calendar = calendar;
JFrame frame = new JFrame();
graph(frame);
}
public void graph(JFrame frame) {
buildBackground(frame);
}
private void buildBackground(JFrame frame) {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(sizeX, sizeY);
JPanel panel = new Background(sizeX, sizeY);
frame.add(panel);
frame.validate();
frame.repaint();
}
}
public class Background extends JPanel {
private int sizeX;
private int sizeY;
public Background(int sizeX, int sizeY) {
this.sizeX = sizeX;
this.sizeY = sizeY;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.DARK_GRAY);
g.fillRect(0, 0, sizeX, sizeY);
}
}
И это работает правильно, темно-серый фон создается правильно.Проблема появляется, когда я пытаюсь создать маленькие прямоугольники, которые представляют дни;Я разработал класс, в котором я хочу представить эти прямоугольники по определенным координатам:
public class DayRectangle extends JPanel {
private int posX;
private int posY;
private int day;
public DayRectangle(int posX, int posY, int day) {
this.posX = posX;
this.posY = posY;
this.day = day;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRect(posX, posY, 60, 60);
}
public Dimension getPreferredSize() {
return new Dimension (60, 60);
}
@Override
public String toString() {
return String.format("(%d,%d):%d", posX, posY, day);
}
}
Координаты прямоугольников созданы правильно, поскольку это содержимое ArrayList
из DayRectangle
:
[(20,20):1, (120,20):2, (220,20):3, (320,20):4, (420,20):5, (520,20):6, (620,20):7, (20,120):8, (120,120):9, (220,120):10, (320,120):11, (420,120):12, (520,120):13, (620,120):14, (20,220):15, (120,220):16, (220,220):17, (320,220):18, (420,220):19, (520,220):20, (620,220):21, (20,320):22, (120,320):23, (220,320):24, (320,320):25, (420,320):26, (520,320):27, (620,320):28, (20,420):29, (120,420):30, (220,420):31]
Они начинаются с (20, 20)
, потому что я хотел оставить несколько пробелов между этими прямоугольниками.
Основная проблема в том, что при выполнении этого кода прямоугольник не печатается:
public void graph(JFrame frame) {
buildBackground(frame);
frame.getGraphics().setColor(Color.WHITE);
JPanel panel;
for (DayRectangle d : arraylist) {
panel = d;
frame.add(panel);
frame.repaint();
}
}
Что я делаю не так?Почему ничего не печатается?Благодаря.