无法绘制 JPanel
Unable to draw over a JPanel
我正在尝试在 JPanel 上绘图。当函数 drawField
被调用时,它什么也不绘制。可能是什么原因?
private void drawField() {
try {
Graphics2D field = (Graphics2D) jPanel2.getGraphics();
field.drawLine(0, 0, 100 , 100);
}catch(Exception exc) { exc.printStackTrace();}
}
它是从主 class 构造函数调用的。
覆盖面板上的 paintComponent
方法。
您不能在构造函数中绘制 JPanel
。现在这样做是不合适的,一旦绘制面板,您绘制的任何内容都会被覆盖。一旦它变得可见就会发生这种情况,因此您永远不会看到您画的东西。
相反,像这样覆盖 paintComponent
方法:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawLine(0, 0, 100, 100);
}
作为绘制面板本身过程的一部分,在事件调度线程上调用此方法。每次需要重新绘制面板的内容时都会调用此方法,因此您可以放心,您的线将始终显示。
如果背景是黑色,请记住将绘图颜色设置为不同的颜色,因为它将默认为该颜色。
我正在尝试在 JPanel 上绘图。当函数 drawField
被调用时,它什么也不绘制。可能是什么原因?
private void drawField() {
try {
Graphics2D field = (Graphics2D) jPanel2.getGraphics();
field.drawLine(0, 0, 100 , 100);
}catch(Exception exc) { exc.printStackTrace();}
}
它是从主 class 构造函数调用的。
覆盖面板上的 paintComponent
方法。
您不能在构造函数中绘制 JPanel
。现在这样做是不合适的,一旦绘制面板,您绘制的任何内容都会被覆盖。一旦它变得可见就会发生这种情况,因此您永远不会看到您画的东西。
相反,像这样覆盖 paintComponent
方法:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawLine(0, 0, 100, 100);
}
作为绘制面板本身过程的一部分,在事件调度线程上调用此方法。每次需要重新绘制面板的内容时都会调用此方法,因此您可以放心,您的线将始终显示。
如果背景是黑色,请记住将绘图颜色设置为不同的颜色,因为它将默认为该颜色。