我有一个使用jTabbedPane的应用程序。 jTabbedPane中有两个选项卡(JPanel)。第一个选项卡包括画布,第二个选项卡包括简单的JLabel。按钮将矩形绘制到画布中。
在此之前,每件事情都很好。但是,当切换标签时,画布会丢失所有内容。它应该自己重新粉刷。
更改标签后应存在矩形。你对这个问题有什么看法吗?
我的按钮代码在这里:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Graphics g = canvas1.getGraphics();
g.drawRect(10, 10, 100, 100);
}
提前致谢。
答案 0 :(得分:0)
首先,您不应将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()
并使用作为参数传递的Graphics来绘制组件。