Я действительно запутался в потоке программы о том, как функция paintComponent
работает в моем JPanel
. В идеале я хотел бы иметь доступ к объекту Graphics, чтобы рисовать вещи из других функций на основе потока моей программы. Я думаю о том, что:
private Graphics myG;
public void paintComponent(Graphics g) {
super.paintComponent(g);
myG = g; //I want a graphics object that I can just draw with.
//Should I just initialize to myG = new Graphics(); or something?
//private Graphics myG = new Graphics(); does not seem to work
}
//this is what's getting called, where I want to call other functions that
//can use myG to draw graphics as I please
public void startPanelView() {
myG.drawRect(350, 20, 400, 300); //doesn't work
otherFunctionForGraphics(); //which will also use myG.
}
Надеюсь, я прояснил это здесь. Я просто хочу иметь возможность использовать класс Graphics по своему усмотрению. В настоящее время я могу делать только такие вещи, как g.drawRect(...)
внутри функции paintComponent()
. Это может работать для моих целей, но я бы хотел больше гибкости.
Спасибо.
РЕДАКТИРОВАТЬ - Хорошо, я понимаю, что я не должен пытаться ссылаться на графический объект снаружи. Но как мне отделить логику приложения от функции paintComponent? Сейчас этот класс выглядит немного грязно, потому что у меня есть следующее:
public void paintComponent(Graphics g) {
if (flag1 == true) {
//do some graphics stuff, that I would prefer to be in another function
}
if (flag2 == true) {
//do some other graphics stuff, again, which I would prefer
//to be in another function
}
//... etc. More of these cases.
}
И в основном функция paintComponent становится глупо длинной и сложной для меня, поэтому я хотел бы разбить ее любым возможным способом.