Переменная g
не определена в основном контексте, потому что вы не объявили / инициализировали ее. Если вы посмотрите на ваш paintBlocks(Graphics g)
метод, g
передается как параметр, однако область действия этой переменной (g
) находится в скобках ({}
) метода paintBlocks(Graphics g)
.
Если у вас есть класс с именем MyClass
, который расширяет компонент, скажем, JPanel
, вы можете сделать что-то вроде этого:
class MyClass extends JPanel
{
public static void main(String[] args)
{
Graphics g = getGraphics(); //would return the graphics object for the JPanel
game.paintBlocks(g);
}
}
Также приятно отметить, что вышеупомянутый метод в некоторых случаях будет помечен как плохой стиль программирования. Есть альтернатива. Вы можете использовать метод paintComponent(Graphics g)
, предоставляемый компонентом.
Тогда ваш главный файл будет выглядеть так:
public static void main(String[] args)
{
repaint(); //this repaints the component, calling the paintComponent method
}
Это также плохой стиль программирования, чтобы называть paintComponent(Graphics g)
самостоятельно. Вы должны разрешить вашей системе вызывать этот метод, и поэтому у вас есть метод repaint()
. Система автоматически вызывает paintComponent(Graphics g)
при перерисовке.
С paintComponent(Graphics g)
вы можете сделать это:
public void paintComponent(Graphics g)
{
super.paintComponent(g); //repainting the panel,not necessary in some cases
game.paintBlocks(g); //passing the graphics object used by the component
}
Надеюсь, это помогло!