Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何清除JPanel中的组件?_Java_Swing_Jpanel_Paintcomponent - Fatal编程技术网

Java 如何清除JPanel中的组件?

Java 如何清除JPanel中的组件?,java,swing,jpanel,paintcomponent,Java,Swing,Jpanel,Paintcomponent,我是Java编程新手。我正在开发一个java应用程序,它在windows框架上绘制形状(圆、线、三角形等)。我定义了一个抽象类Shapes.java来包含形状的框架: 公共抽象类形状{ 公开摘要作废图(图g); } 然后,我定义了一些类,如圆形、直线、三角形和矩形,它们是从Shapes.java类扩展而来的 公共类圆形扩展形状{ 私人INTX; 私营企业; 私有整数半径; 公共圆(整数x,整数y,整数半径){ 这个.x=x; 这个。y=y; 这个半径=半径; } @凌驾 公共空间绘制(图g){

我是Java编程新手。我正在开发一个java应用程序,它在windows框架上绘制形状(圆、线、三角形等)。我定义了一个抽象类
Shapes.java
来包含形状的框架:

公共抽象类形状{
公开摘要作废图(图g);
}
然后,我定义了一些类,如圆形、直线、三角形和矩形,它们是从
Shapes.java
类扩展而来的

公共类圆形扩展形状{
私人INTX;
私营企业;
私有整数半径;
公共圆(整数x,整数y,整数半径){
这个.x=x;
这个。y=y;
这个半径=半径;
}
@凌驾
公共空间绘制(图g){
g、 绘图椭圆(x半径、y半径、半径*2、半径*2);
}}
在我的
Picture.java
类中,我设置了一个JFrame并在其上添加形状:

公共类图片扩展JFrame{
私有静态最终长serialVersionUID=1L;
私有整数宽度;
私人内部高度;
私有布尔值isClear=false;
私有ArrayList listShape=新ArrayList();
私有类ShapePanel扩展了JPanel{
私有静态最终长serialVersionUID=1L;
@凌驾
受保护组件(图形g){
超级组件(g);
如果(isClear)
返回;
其他的
用于(形状s:listShape)
s、 抽签(g);
}
公共空白添加形状(s){
listShape.add(s);
}
公共图片(整数宽度、整数高度、字符串标题)抛出HeadlessException{
ShapePanel mypanel=新的ShapePanel();
添加(mypanel);
此.setDefaultCloseOperation(关闭时退出);
这个。宽度=宽度;
高度=高度;
这个.setTitle(title);
}  
公众抽签(){
setLocationRelativeTo(空);
设置尺寸(宽度、高度);
setVisible(真);
重新油漆();
}
void clear(){//清除JPanel中的组件
此.setIsClear(真);
这个。validate();
这个。重新绘制();
}
私有void setIsClear(布尔b){
//TODO自动生成的方法存根
this.isClear=b;
}
}
但是当我在主类中调用
clear()
方法时,程序无法再次重新绘制新形状。我如何修复错误?谢谢

公共类MyPic{
公共静态void main(字符串[]args){
图片图片=新图片(420300,“形状演示”);
圆圈c1=新圆圈(320,80,80);
矩形r1=新矩形(100100);
三角形t1=新三角形(100100200150150,50);
l1线=新线(0205400,50);
图.添加(c1);
图.增加(r1);
图.增加(t1);
图.增加(l1);
pic.clear();
pic.draw();
pic.add(l1);//再次添加l1
}
}

好的,通过调用
clear()
可以将变量
isClear
设置为
true
。然后在
paintComponent
中说:

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if(isClear)
        return;
这意味着“如果isClear为true,则不绘制任何内容”(事实上,您只需使用
clear()
)将其设置为true即可)。因此,这也就不足为奇了


无论如何,我认为在
clear
方法中,您可能需要执行
listShape.clear()
而不是设置该布尔值。

我认为在clear()方法中,而不是这个.validate();,应该是这个.revalidate();Happy 4 figure rep.:)