0

我有一个带有 jTabbedPane 的应用程序。jTabbedPane 中有两个选项卡(JPanel)。第一个选项卡包括画布,第二个选项卡包括简单的 JLabel。按钮将矩形绘制到画布中。

在那之前一切都很好。但是,在切换选项卡时,画布会丢失所有内容。它应该自己重新粉刷。

更改选项卡后应该存在矩形。你对这个问题有任何想法吗?

我的按钮代码在这里:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    Graphics g = canvas1.getGraphics();
    g.drawRect(10, 10, 100, 100);
}

提前致谢。

4

1 回答 1

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 覆盖和绘制组件。

于 2013-02-24T16:36:14.100 回答