sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-02 13:03:28 28 4
mua khóa gpt4 Nike

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

Sơn

//imports    
public class Paint extends JPanel{
private ArrayList 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< 中访问 Sơn 的重绘.

1 Câu trả lời

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

Ví dụ:

public class Paint extends JPanel {
private ArrayList 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/

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com