Я намагаюся зробити невелику програму малювання. Я малюю об'єкти над 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
вікно і може бути пофарбовано, що призведе до того, що графіка буде витягнута над усіма іншими подібно: