[英]Repaint a JPanel from within another JPanel
因此,我正在制作一個繪畫程序,我有一個主要的Paint
類(用於檢測鼠標輸入和繪畫),以及一個Tools
類(其為左側的工具欄),其中包含許多工具,例如筆刷大小更改和形狀更改。 因此,我想向Tools
類添加一個清除按鈕,以清除整個屏幕。 我的問題是Paint
類持有要Paint
的點的ArrayList,而我無法從Tools
內重新繪制Paint
。
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
}
}
}
Tools
類
//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
的repaint。
只需將對Paint
實例的引用傳遞給Tools
的構造函數。 或者,在包含兩者的容器( JFrame
等)上調用重繪,這將導致其所有子級都被重繪。
例如:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.