Сделать графику из JPanel видимой за пределами JPanel

У меня есть прямоугольник, который я перемещаю по JPanel, используя repaint(). Когда положение прямоугольника достигает положения за пределами JPanel, он больше не виден. Как я могу сделать его видимым за пределами JPanel?

Это мой метод рисования:

public void paintComponent (Graphics g) {
    g.setColor(Color.red);
    g.fillRect(dist, 0, 10, 10);
    dist++;
}

Обновление:

У меня есть несколько панелей JPanel в JFrame, которые я разместил с помощью GridBagLayout. Панели JPanels представляют переулки на улице и автомобили в виде прямоугольников. Причина, по которой прямоугольники видны за пределами их JPanel, состоит в том, чтобы машины меняли полосу движения. JPanel показался мне подходящим для установки первой позиции автомобиля.

Есть ли лучшее решение этой проблемы?


person flec    schedule 12.10.2013    source источник
comment
несвязанный: не изменять состояние компонента при рисовании...   -  person kleopatra    schedule 12.10.2013


Ответы (2)


Вы заявляете:

У меня есть прямоугольник, который я перемещаю по JPanel, используя repaint(). Когда положение прямоугольника достигает положения за пределами JPanel, он больше не виден. Как я могу сделать его видимым за пределами JPanel?

Если JPanel рисует его, короткий ответ: «Вы не можете».

Более длинный ответ будет зависеть от того, где вы пытаетесь нарисовать JPanel и как настроена остальная часть вашего графического интерфейса.


Изменить
Теперь вы заявляете:

У меня есть несколько панелей JPanel в JFrame, которые я разместил с помощью GridBagLayout. Панели JPanels представляют переулки на улице и автомобили в виде прямоугольников. Причина, по которой прямоугольники видны за пределами их JPanel, состоит в том, чтобы машины меняли полосу движения. JPanel показался мне подходящим для установки первой позиции автомобиля.

Если бы я кодировал так, как это делаете вы, я бы не заставлял эти локальные панели JPanel рисовать машину, а предпочел бы, чтобы машина была собственным спрайтом, существующим на слое, отличном от улиц, возможно, с использованием JLayeredPane. Он может существовать в своей собственной JPanel, охватывающей всю вашу карту, если эта JPanel не является непрозрачной. После этого вы можете двигать машину как угодно.

person Hovercraft Full Of Eels    schedule 12.10.2013
comment
Я добавил подробности об остальном графическом интерфейсе. - person flec; 12.10.2013

Как было сказано ранее, вы не можете, но если вы хотите, чтобы он занимал большую площадь, вы должны либо увеличить JPanel, либо поместить paintComponent в родительский компонент.

person Basim Khajwal    schedule 12.10.2013