java - 从另一个 JPanel 中重新绘制一个 JPanel

标签 java swing user-interface

所以,我正在制作一个绘画程序,我有一个主要的Paint类,它检测鼠标输入和绘画,还有一个Tools类,它是左侧的工具栏,拥有许多工具,例如画笔大小更改和形状更改。因此,我想向 Tools 类添加一个清除按钮,以清除整个屏幕。我的问题是 Paint 类保存了它绘制的点的 ArrayList,并且我无法从 Tools 中重新绘制 Paint。 p>

Paint

//imports    
public class Paint extends JPanel{
    private ArrayList<Brush> points;
    ...

    public Paint() {
        ...
    }

    public void paintComponent(Graphics page) {
        ...

        //draws all points in the arraylist
        for (Brush b : points) {
            //paint points
        }
    }
}

工具

//imports
public class Tools extends JPanel
{
    private JButton clear;

    public Tools() {
        clear = new JButton("Clear");
        clear.addActionListener(new BrushInput());
    }

    public void paintComponent(Graphics page) {
        ...
    }
    private class BrushInput implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == clear) {
                //clear points arraylist and repaint
            }
        }
    }

}

我遇到的问题是 repaint() 是一个实例方法,因此我无法从 Tools< 中访问 Paint 的重绘.

最佳答案

只需将对 Paint 实例的引用传递给 Tools 的构造函数即可。或者,对包含这两个容器的容器(JFrame 等)调用 repaint,这应该会导致其所有子级都被重新绘制。

例如:

public class Paint extends JPanel {
    private ArrayList<Brush> points;

    // . . .

    public void clear() {
        points.clear();
        repaint();
    }
}

public class Tools extends JPanel {
    private JButton clear;
    private Paint paint;

    public Tools(Paint paint) {
        this.paint = paint;
        // . . .
    }

    // . . .

    private class BrushInput implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == clear) {
                paint.clear();
            }
        }
    }
}

创建这些组件的代码:

Paint paint = new Paint();
Tools tools = new Tools(paint);

关于java - 从另一个 JPanel 中重新绘制一个 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44233889/

相关文章:

java - org.firebirdsql.jdbc.FBBlob 到文件

user-interface - 有什么好的网站可以查看实际 Web 应用程序的屏幕截图吗?

javascript - Kendo UI 网格 - 抛出错误 (kendo.format ("Cannot call method ' {0 }' of {1} before it is initialized",t,r))

java - 有适用于 Thinlet 0.75 的文档吗?

java - Spring Boot 以自己的对象作为键返回 Map 的问题

java - Java 和 .Net 之间的发布订阅

java - Hibernate 字段多个别名

java - 与在 Java 中表示集合的集合混淆?

java - 随着时间的推移定期调用重新绘制

java - 客户端停止对服务器的消息使用react