В этой части:
JPanel drawingPanel = new JPanel();
DrawingComponent dc = new DrawingComponent();
dc.setPreferredSize(new Dimension(100, 100));
drawingPanel.add(dc);
Вы устанавливаете предпочтительный размер вашего DrawingComponent
в (100,100).Затем, когда вы рисуете компонент, вы рисуете прямоугольник в Rectangle(400, 400, 50, 50)
, используя конструктор Rectangle(int x, int y, int width, int height)
.
Сказав это, я думаю, это довольно очевидно.Ваш компонент имеет размер 100x100, но вы пытаетесь нарисовать 400x400-й пиксель, что приводит к тому, что прямоугольник рисуется вне границ вашего компонента.
Я не знаю, какими должны быть координаты прямоугольника, но если вы хотитеЧтобы ваш компонент отображался, измените прямоугольник на Rectangle rect1 = new Rectangle(0, 0, 50, 50);
Кроме того, VGR упоминается в комментариях (он получил меня: P), когда вы override
paintComponent
метод, убедитесь, что вы вызываете super.paintComponent()
.
Наконец, запустите ваше приложение, используя метод SwingUtilities#invokeLater
.
Сумма того, что я имею в виду в коде:
public static class DrawingComponent extends JComponent {
public void paintComponent(Graphics g) {
super.paintComponent(g); // Should always start with super method.
Graphics2D g2 = (Graphics2D) g;
Rectangle rect1 = new Rectangle(0, 0, 50, 50);
g2.draw(rect1);
}
}
public static void main(String[] args) {
// All swing applications must run on their own thread named EDT (Event dispatch thread)
SwingUtilities.invokeLater(() -> {
Window window = new Window();
});
}