Swing 画布重绘应自行调用
我有一个jTabbedPane的应用程序。jTabbedPane中有两个选项卡(JPanel)。第一个选项卡包括画布,第二个选项卡包括简单的JLabel。按钮将矩形绘制到画布中 在那之前一切都很好。但是,在切换选项卡时,画布将丢失所有内容。它应该自己重新油漆 更改选项卡后应存在矩形。你知道这个问题吗 我的按钮代码如下:Swing 画布重绘应自行调用,swing,canvas,jpanel,jtabbedpane,Swing,Canvas,Jpanel,Jtabbedpane,我有一个jTabbedPane的应用程序。jTabbedPane中有两个选项卡(JPanel)。第一个选项卡包括画布,第二个选项卡包括简单的JLabel。按钮将矩形绘制到画布中 在那之前一切都很好。但是,在切换选项卡时,画布将丢失所有内容。它应该自己重新油漆 更改选项卡后应存在矩形。你知道这个问题吗 我的按钮代码如下: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Graphics g = c
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Graphics g = canvas1.getGraphics();
g.drawRect(10, 10, 100, 100);
}
提前感谢。首先,您不应该将AWT组件放在Swing组件中。使用JComponent或JPanel而不是Canvas 第二,不,它不应该重新油漆自己。单击按钮时,只需将应绘制的内容存储在某个变量中,并且应重写
paintComponent()
方法以绘制存储在此变量中的内容。这样,每次重新绘制组件时,它都会重新绘制最后存储在此变量中的内容
例如:
public class RectangleComponent extends JComponent {
private boolean shouldPaintRectangle = false;
public void setShouldPaintRectangle(boolean b) {
this.shouldPaintRectangle = b;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (shouldPaintRectangle) {
g.drawRect(10, 10, 100, 100);
}
}
}
一般来说,您不应该询问组件的图形并在其上绘制。相反,您应该重写
paintComponent()
并使用作为参数传递的图形绘制组件。不要在jcomponent.getGraphics返回的图形上绘制,它非常不稳定。相反,将矩形坐标存储在某个位置,重写paintComponent来绘制它,并在操作中调用repaint