по сути, он выталкивает черный прямоугольник, нарисованный в этой программе, и выводит его из заданного местоположения.
Что вы имеете в виду вне его местоположения? Покраска всегда выполняется относительно компонента. Таким образом, ваша картина всегда будет выполняться в (200, 275) компонента.
Если вы пытаетесь рисовать в (200, 275) относительно «рамки», то не надо. Это НЕ, как живопись работает.
Другие проблемы с вашим кодом:
Не пытайтесь установить размер вашего кадра. Если пользовательская панель имеет размер (450, 600), как рамка может иметь одинаковый размер? Рамка также содержит «строку заголовка» и «границы». Вместо использования setSize () вы вызываете frame
.pack () just before
frame1.setVisible (….) `.
Имена классов начинаются с символа верхнего регистра. Учитесь на примере. Вы когда-нибудь видели имя класса в JDK, которое не начинается с символа в верхнем регистре?
Пользовательское рисование выполняется путем переопределения paintComponent(…)
, а не paint ().
По умолчанию JPanel использует FlowLayout. То, что вы видите, это кнопка в одной строке, а затем класс «HomeGraphics» слишком велик, чтобы поместиться в одной строке, поэтому он переносится на вторую строку.
Вы должны быть более явными, когда делаете макет кадра. Таким образом, ваш код должен выглядеть примерно так:
JPanel wrapper = new JPanel();
wrapper.add( playButton );
//JPanel panel1 = new JPanel();
//panel1.add(playButton);
//panel1.add(new homeGraphics());
JPanel panel1 = new JPanel( new BorderLayout() );
panel1.add(wrapper, BorderLayout.PAGE_START);
panel1.add(new HomeGraphics(), BorderLayout.CENTER);
Теперь код более четко показывает вашу попытку размещения.