/ / Java swing малює об'єкти над іншими компонентами - java, swing, jpanel, paintcomponent

Java Swing малює об'єкти над іншими компонентами - java, swing, jpanel, paintcomponent

Я намагаюся зробити невелику програму малювання. Я малюю об'єкти над a JPanel який знаходиться на вершині JFrame (Я використовую Netbeans 6.9). У мене є деякі основні функціональні можливості, такі як шрифт, лінія і fillRectangle. Я використовую стандартний метод для малювання, який повинен перевизначити paintComponent().

class .... extends JPanel
{
@Override
void paintComponents(Graphics g)
{
.......
}
}

Проблема в тому, що, коли я малюю текст, рядокобласть, то вона тягнеться за нею, а не поверх неї. В основному я хочу намалювати об'єкти поверх всіх інших об'єктів, які раніше були намальовані на JPanel. Я дійсно не хочу перемикатися на інші типи шаруватої панелі. Один дуже наївний метод буде скасувати кожний об'єкт і пофарбувати їх у зворотному порядку (перший перший).

Відповіді:

6 за відповідь № 1

Вам потрібно перевизначити paintComponent(Graphics g) і не забудьте подзвонити super.paintComponent(Graphics g);

class .... extends JPanel
{
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);//honor paintComponent an call super to draw other components that were added to the JPanel
.......
}
}

Вам також може знадобитися перевизначити getPreferredSize(..) від JPanel і повернути відповідний розмір так JPanel буде видно:

class .... extends JPanel
{
@Override
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}
}

EDIT:

Залежно від того, що ви робите, ви також можете подивитися на GlassPane яка дозволить вам встановити прозору панель над усім JFrame вікно і може бути пофарбовано, що призведе до того, що графіка буде витягнута над усіма іншими подібно:

введіть опис зображення тут